강사가 작성한 모든 C 파일이 첫 번째 줄에서 단일 #으로 시작하는 이유는 무엇입니까?


431

나는 C 코스 노트를 겪을 것이고, 모든 C 프로그램 소스 파일은 프로그램 #의 첫 줄 에서 단일로 시작 합니다.

그런 다음 빈 줄이 있고 그 뒤에 다른 main기능이 뒤 따릅니다 .

이유는 무엇입니까 #?

(지금은 기한이 지났고 실제로 그 장을 요청할 수는 없습니다.)

예를 들면 다음과 같습니다.

#

#include <stdio.h>
int main() {
   printf("Hello, World!");
   return 0;
}


3
코스 노트의 첫 번째 예제를 작성했습니다. 말 그대로 #, 빈 줄, 프로그램이 있습니다.
메인 맨

30
공란의 주된 목적 #은 난독 화입니다. 모든 사람들을 혼란스럽게 만들고 싶다면 예를 들어 모든 소스 파일을 줄로 시작할 수 있습니다 #//#BEGIN#\\#(절대 아무것도하지 않음).
Lundin

3
@Bathsheba 아마이 사람들 중 하나 일 것입니다 cl.cam.ac.uk/people/academic.html
TylerH

7
@Bathsheba 마지막에 표시된 타임 스탬프는 C99 참조 표준의 관련 인용문과 함께 질문을 한 지 1 분 후에 합리적으로 자세한 답변을 제공했음을 나타냅니다. 당신은 음모자입니다. 아마도 일루미나티에서. 두 질문 모두 어떻게 그렇게 인기를 얻었습니까?
Nat

답변:


614

와우,이 요구 사항은가는 길에 다시 1970 년대에 있습니다.

에서 초기 에는 호출하기를 원한다면 사전 표준화 C의 일, 전처리 , 당신은을 써야했다 #소스 파일의 첫 번째 행의 첫 번째 일이있다. 파일 맨 위에 a 쓰면 #다른 전 처리기 지시문을 유연하게 배치 할 수 있습니다.

에서 큰 데니스 리치 자신에 의해 원래의 C 초안 :

12. 컴파일러 제어 라인

[...] 전처리기를 호출하게하려면 프로그램의 첫 번째 행이 #으로 시작해야합니다. 전처리 기는 널 (null) 라인을 무시하므로이 라인에는 다른 정보가 필요하지 않습니다.

그 문서는 큰 책을 읽게한다. 그리고 나는이 질문에 미친 고양이처럼 뛰어들 수있게했다.

나는 그것이 단순히 감상적 인 강사라고 생각합니다 .ANSI C 이후 확실히 필요하지 않았습니다.


22
내가 이해하는 것처럼, 첫 번째 문자는 #그 자체로 한 줄에 있어야 한다는 것이 아니라 단지로 시작해야한다는 #이유는 #include무엇입니까? 아니면 내가 잘못 이해하고 있습니까?
Federico klez Culloca

14
@Bathsheba " 이 전처리기를 호출하려면 프로그램의 첫 번째 줄은 #으로 시작해야합니다. 전처리 기는 널 (null) 줄을 무시 하므로이 줄에는 다른 정보가 필요하지 않습니다. "<-그래서 이미 전 처리기 지시문을 포함 할 수 있지만 필요하지는 않습니다 ....

5
C (1980)에서 프로그래밍을 시작할 때 요구 사항은 아니 었습니다. ANSI C는 1989 년까지 표준화되지 않았습니다.
pojo-guy 2013

29
@ federico-klez-culloca 파일이 포함되면 파일이 선행 번호없이 종료 될 수 있습니다. 장래에 누군가가 선행 번호의 부작용을 인식하지 않으면 서 필요없는 포함을 삭제하기 때문입니다.
Fadeway

4
@Casanova-아니요. 그렇게하고 그러한 대답을 받아들이면 사이트 규칙에 위배됩니다. 다른 계정으로 묻고 답하는 것은 상호 투표 없이도 사이트 규칙의 정신에 위배됩니다. 동일한 계정으로 자신의 질문에 대답하고 그 대답을 받아들이는 데 아무런 해가 없습니다. 과거에는 그렇게했습니다.
Bathsheba

1

아무것도하지 않습니다

C / C ++의 ISO 표준 기준 :

양식의 전처리 지시문

# new-line

효과가 없습니다.

따라서 오늘날의 컴파일러에서 빈 해시는 아무것도하지 않습니다 ( new-line ;기능이없는 것처럼 ).


추신 : 사전 표준화 된 C 에서 # new-line중요한 역할을했으며 C @ 전처리기를 호출하는 데 사용되었습니다 (@Bathsheba가 지적한대로). 따라서이 코드는 해당 기간 내에 작성되었거나 습관에서 비롯된 것입니다.


-5

C의 컴파일 프로세스에 대해 알아야합니다. 소스 코드가 실행 가능한 이진 코드 (파일)로 변환되는 방식을 "알아야"하기 때문입니다.

컴파일 프로세스에서 C 소스 코드는 전 처리기 섹션을 교차해야합니다. 그러나 컴파일러에게 코드를 사전 처리하도록 지시하는 방법은 무엇입니까? ... Time # Symbol은 컴파일러에 대한 사전 처리 표시기에 도입되었습니다.

예를 들어 #define PI 3.141소스 코드에 있습니다. 그런 다음 전처리 세션 후에 변경됩니다. 즉, 모든 PI가 3.141로 변경됩니다.

이와 같이 #include <stdio.h>표준 I / O 함수가 소스 코드에 추가됩니다.

리눅스 머신이 있다면, 다음과 같이 컴파일하십시오 gcc -save-temps source_code.c. 그리고 컴파일러 출력을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.