programing

왜 선생님이 쓴 모든 C파일이 첫 줄에 #하나로 시작하나요?

newsource 2022. 8. 16. 23:27

왜 선생님이 쓴 모든 C파일이 첫 줄에 #하나로 시작하나요?

C코스 노트를 몇 개 살펴보고 있는데 모든 C프로그램 소스 파일은 1개로 시작합니다.#프로그램의 첫 줄에 있습니다.

그리고 공백 행이 있고, 그 뒤에 다른 것들이 이어집니다.main기능.

그 이유는 무엇입니까?#?

(지금은 기한이 지났기 때문에 그 친구에게 부탁할 수 없습니다.)

다음은 예를 제시하겠습니다.

#

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

와, 이 요구사항은 1970년대까지 거슬러 올라갑니다.

사전 표준화 C의 초기 단계에서 프리프로세서를 호출하려면#소스 파일의 첫 번째 줄에 있는 첫 번째 항목으로 지정합니다.a만 쓰다#파일 맨 위에 있는 에서는 다른 프리프로세서 디렉티브를 유연하게 배치할 수 있습니다.

위대한 Dennis Ritchie가 직접 작성한 원본 C 초안:

12 컴파일러 제어선

[...] [] 프리프로세서를 호출하려면 프로그램의 첫 번째 행이 # 로 시작해야 합니다.늘 행은 프리프로세서에 의해 무시되므로 이 행에는 다른 정보가 포함되지 않습니다.

그 문서는 훌륭한 읽을거리가 된다(그리고 나는 이 문제에 미친 고양이처럼 달려들 수 있었다.

나는 그것이 단순히 감상적인 강사라고 의심한다 - 그것은 ANSI C 이후 확실히 요구되지 않았다.

아무것도 할 수 없다

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

양식의 전처리 지시어

# new-line

효과가 없습니다.

그래서 오늘날의 컴파일러에서는 빈 해시는 아무 것도 하지 않습니다(예:-).new-line ;기능은 없습니다).


PS: * 사전 표준화 C*에서는# new-line는 중요한 역할을 하고 있으며 (@Bathsheba에서 지적한 바와 같이) C Pre-Processor를 호출하기 위해 사용되었습니다.이 코드는 그 기간 내에 작성되었거나 프로그래머의 습관에서 나온 것입니다.


편집: 최근에 이런 코드를 발견했습니다.

#ifdef ANDROID
#
#define DEVICE_TAG "ANDROID"
#define DEBUG_ENABLED
#
#else
#
#define DEVICE_TAG "NOT_ANDROID"
#
#endif /* ANDROID */

여기, 빈 해시는 코드를 보기 좋게 하기 위해서만 있습니다.또, 프리프로세서 블록인 것을 나타내는 것으로써, 가독성도 향상됩니다.

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

컴파일 프로세스에서 C 소스 코드는 프리프로세서 섹션을 통과해야 합니다.하지만 어떻게 컴파일러에게 코드를 미리 처리하라고 말할 수 있을까요?시간 # 기호가 컴파일러에 사전 처리 인디케이터에 도입되었습니다.

를 들어 " " " 입니다.#define PI 3.141소스 코드에 있습니다.그런 다음 전처리 세션이 끝나면 변경됩니다.가 3됩니다.

느낌이에요.#include <stdio.h>I/O를 사용하다

머신을 하고 있는 는, 와 같이 해 주세요.gcc -save-temps source_code.c컴파일러 출력을 참조해 주세요.

언급URL : https://stackoverflow.com/questions/45629176/why-do-all-the-c-files-written-by-my-lecturer-start-with-a-single-on-the-first