#이(가) 포함되어 있으면 실제로 어떤 역할을 합니까?
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>
대신.
그렇지 않아, 아니야.컴파일러는 원래의 파일 디스크립터를 스택에 저장하고 그 파일을 엽니다.#include
d 파일; 해당 파일의 끝에 도달하면 파일을 닫고 원래 파일 설명자로 다시 팝업됩니다.그래야 둥지를 틀 수 있습니다.#include
d 파일은 거의 제멋대로입니다.
그# 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
'prosource' 카테고리의 다른 글
강력하게 입력된 MVC3 뷰에서 모델을 전달하기 위해 AJAX Post 쿼리를 사용하는 적절한 방법 (0) | 2023.10.25 |
---|---|
MySQL에서 Postgre로 전환SQL - 팁, 속임수, 잡동사니? (0) | 2023.10.25 |
PySpark에서 dataframe 컬럼의 이름을 얻는 방법은? (0) | 2023.10.25 |
Word press - remove_filter를 한 페이지에만 적용 (0) | 2023.10.25 |
jQuery의 getJSON() 메서드로 요청 헤더를 전달하려면 어떻게 해야 합니까? (0) | 2023.10.25 |