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

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

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

이유는 무엇입니까 #?

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

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

#

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



답변

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

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

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

12. 컴파일러 제어 라인

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

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

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


답변

아무것도하지 않습니다

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

양식의 전처리 지시문

# new-line

효과가 없습니다.

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


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


답변

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

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

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

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

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


답변