2009-12-15 6 views
3

This MSDN document 따옴표 : #include 구문이 포함 된 파일의 같은 디렉토리에 파일을 포함하기위한C++ : #include 파일 검색?

보고, 이 (사용법 #include) 그 파일을 포함하는 것이 모든 파일의 다음 에있는 디렉토리

잠깐 뭐라 구요?
그게 실제로 무슨 뜻입니까 (대담한 것)?

+0

동작은 구현에 따라 다르므로 (#include를 사용하는 것처럼) –

답변

5

그것은 아마 foo/bar/baz.c../bog/bog.h를 포함하며, 후자는

#include "fix.h" 

가 포함되어있는 경우가 foo/bar/fix.h을 찾을 것을 의미합니다. 즉, include가 들어있는 헤더가 포함 된 C 파일이 포함 된 디렉토리를 찾습니다. 명확한? :)

그래서, 화려한 ASCII 그래픽으로 렌더링 파일 레이아웃은 다음과 같습니다

foo/ 
    | 
    +-bar/ 
    | | 
    | +-baz.c 
    | | 
    | +-fix.h 
    | 
    +-bog/ 
    | 
    +-bog.h 

그리고 bog.h 다음 형제 디렉토리 foofix.h을 찾을 수 있습니다.

+0

아마도 'foo/bog/fix.h'를 의미할까요? – shoosh

+0

@shoosh - 아니, 긴장을 푸는 것은 foo/bar/fix.h를 의미한다고 생각하지만 위의 msdn 규칙에 따라 fix.h가 foo/bar 아래에 있지만 bog/컴파일러 아래에 없다면 컴파일러는 여전히이를 찾습니다. 당신이 게시 한 스 니펫은 foo/bar를 먼저 찾은 다음 foo/bog를 볼 것임을 나타냅니다. – BeeBand

+0

수정 프로그램을 검색하고 있습니다.h는 foo/bog ("bog.h"가 "상위"파일이기 때문에)에서 시작할 것이지만, 없으면 foo/bar ("조부모"가있는 곳)에서 검색이 계속됩니다. Shoosh는 실제로 Ramakrishna의 답변에서 인용 된 설명을 위해 나머지 도움말 페이지를 계속 읽어야했습니다. –

1

나는 당신이 등 다른 파일 bar.cpp, baz.cpp에 포함 된 파일 foo.h을 가지고있는 경우 다음 컴파일러는 bar.cpp과에 대한 baz.cpp의 디렉토리에서 검색합니다 foo.h#include "somefile.h" 문을 사용하는 것이라고 생각합니다.

1

MSDN 문서는 아래를 참조하십시오.

큰 따옴표로 묶은 파일 이름이 불완전한 경로 지정 인 경우 전처리 기는 먼저 "상위"파일의 디렉토리를 검색합니다. 상위 파일은 #include 지시문을 포함하는 파일입니다. 예를 들어, file1이라는 파일 내에 file2라는 파일을 포함 시키면 file1이 상위 파일이됩니다.

포함 파일은 "중첩"될 수 있습니다. 즉, #include 지시어는 다른 #include 지시어로 명명 된 파일에 나타날 수 있습니다. 예를 들어 위의 file2는 file3을 포함 할 수 있습니다. 이 경우 file1은 여전히 ​​file2의 부모가되지만 file3의 "조부모"가됩니다.

포함 파일이 중첩되어 있고 명령 줄에서 컴파일 할 때 디렉토리 검색은 상위 파일의 디렉토리로 시작한 다음 모든 조부모 파일의 디렉토리를 진행합니다. 따라서 검색은 현재 처리중인 소스가 들어있는 디렉토리에 상대적으로 시작됩니다. 파일을 찾을 수 없으면 검색은/I 컴파일러 옵션으로 지정된 디렉토리로 이동합니다. 마지막으로, INCLUDE 환경 변수에 의해 지정된 디렉토리가 검색됩니다.