prosource

#이(가) 포함되어 있으면 실제로 어떤 역할을 합니까?

probook 2023. 10. 25. 23:22
반응형

#이(가) 포함되어 있으면 실제로 어떤 역할을 합니까?

C(또는 C를 기반으로 하는 언어)에서는 다음 문장을 즐겁게 사용할 수 있습니다.

#include "hello.h";

그리고 voila, 모든 기능과 변수는hello.h자동으로 사용할 수 있습니다.

하지만 실제로는 어떤 역할을 할까요?컴파일러 문서와 튜토리얼을 훑어보고 온라인으로 검색하는데 시간을 보냈지만 마법에 대해 내가 느낄 수 있는 유일한 인상은#include명령어는 다음의 내용을 "붙여넣기"한다는 것입니다.hello.h그 선 대신에그 이상의 것이 있을 겁니다.

논리적으로는 복사/붙여넣기가 정확히 일어나는 일입니다.유감스럽게도 더 이상은 없습니다.당신은 필요 없어요.;,그래도.

귀하의 구체적인 예는 스펙, 섹션 6.10.2 소스 파일 포함, 단락 3:

양식의 사전 처리 지침

# include "q-char-sequence" 신라인의

해당 명령을 사이의 지정된 시퀀스에 의해 식별된 소스 파일의 전체 내용으로 대체합니다."구분 기호

그것(복사본/붙여넣기)이 바로 그것입니다.#include "header.h"한다.

다음의 경우에는 다를 것입니다.#include <header.h>또는 컴파일러가 파일을 찾을 수 없을 때."header.h"그리고 그것은 시도합니다.#include <header.h>대신.

그렇지 않아, 아니야.컴파일러는 원래의 파일 디스크립터를 스택에 저장하고 그 파일을 엽니다.#included 파일; 해당 파일의 끝에 도달하면 파일을 닫고 원래 파일 설명자로 다시 팝업됩니다.그래야 둥지를 틀 수 있습니다.#included 파일은 거의 제멋대로입니다.

# include사전 processor(프로그램이 실제로 컴파일되기 전에 발생하는 프로세스)의 "관심 grabs"을 진술하고 다음과 같은 것을 포함하도록 사전 processor을 "tells"합니다.# include진술.

프리 프로세서는 상당히 많은 작업을 수행하도록 지시될 수 있지만, 이 경우 헤더 파일(로 표시됨)을 인식하도록 요청됩니다..h해당 헤더의 이름을 따라가며 헤더임을 나타냅니다).

이제 헤더는 코드에 명시적으로 정의되지 않은 C 선언과 함수의 정의를 포함하는 파일입니다.이것은 무엇을 의미합니까?함수를 사용하거나 특수한 유형의 변수를 정의하고자 할 때 이러한 함수/정의가 다른 곳(예를 들어 표준 라이브러리)에서 정의된다는 것을 알고 있다면 다음을 포함할 수 있습니다.# include) 알고 있는 헤더에는 필요한 내용이 포함되어 있습니다.그렇지 않으면 인쇄 기능(예: 인쇄 기능)을 사용하고자 할 때마다 인쇄 기능을 다시 만들어야 합니다.

코드에 명시적으로 정의되어 있지 않고 사용자가 정의하지 않은 경우#include당신이 사용하고 있는 함수의 헤더 파일은, 당신의 컴파일러가 "이봐!"와 같은 말을 하며 불평할 것입니다.는 이 함수가 어디에 정의되어 있는지 알 수가 없어서, 당신의 코드에서 이 정의되지 않은 함수를 어떻게 해야 할지 모르겠습니다!"라고 말했습니다.

전처리기의 일부입니다.http://en.wikipedia.org/wiki/C_preprocessor#Including_files 을 보십시오.네, 복사해서 붙여넣기만 하면 됩니다.

이것은 이 질문에 대답할 수 있는 좋은 링크입니다.

http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx

일반적으로 #include와 #include "path-name"은 사전 프로세서의 검색 순서가 다를 뿐입니다.

언급URL : https://stackoverflow.com/questions/5735379/what-does-include-actually-do

반응형