2011-05-12 4 views
1

합니까 :동일한 헤더를 포함하는 두 가지 방법간에 컴파일러에서 다른 점이 있습니까?

#include <vector> 
#include <string> 
#include <winsock2.h> 
#include <iphlpapi.h> 
#include "FileX.h" <--------------which #include <windows.h> 

하나의 헤더 파일과 같은 컴파일 :

첫 번째 경우에
#include <vector> 
#include <string> 
#include <winsock2.h> 
#include <iphlpapi.h> 
#include <windows.h> 

이는 WINDOWS.H 다른 파일입니다 (아직 마지막 포함).

동일한 헤더를 포함하는 두 가지 방법간에 컴파일러에서 다른 일이 발생합니까? FileX.h이는 #include <windows.h>를 수행하기 전에 뭔가 이상한 (예를 들어 #ifdef의, 또는 #pragma들)을 수행하지 않는 한

답변

2

가 정의됩니다. 다음과 같이 간단하게 정의 된 경우에도

, 일이 너무 많은 헤더를 포함하는 경우

#include <windows.h> 

, 당신은 당신이 직접 <windows.h>을 포함하는 경우보다 먼저 컴파일러의 자원 한도에 도달 할 수 있습니다 다를 수 있습니다, 그리고 히트 수 귀하의 컴파일러 등 다른 오류를 칠 수있는 다른 경로 ...

그래서 정말 "뭔가 다른 컴파일러에서"의미에 따라 달라집니다.

+0

은 왜 컴파일되지 않습니까? –

2

, 다음이 동일해야합니다.

#error "This is different from windows.h, as it contains an #error!" 
#include <windows.h> 

는 그래서 그래,이 경우 거기에 "뭔가 컴파일러에서 서로 다른 발생합니까"다음과 같이 나의 세계 "FileX.h"에서

+0

파일은 이미 정의 된 경우 컴파일되지 않도록 전 처리기 명령어로 래핑됩니다. 즉 #ifndef _FILEX –

1

사용하는 컴파일러에 따라 다릅니다. 보통 ""변종은 그것을 포함하는 파일의 디렉토리에서 헤더를 찾기 시작합니다. <> include는 시스템 헤더로 직접 이동합니다.

언어 표준은 단지 정의 된 구현이라고 말합니다.

관련 문제