2009-09-16 6 views
11

2 개의 플랫폼 관련 stdafx.h 파일을 내 .cpp 파일에 포함하려고 시도하지만 컴파일러가 #ifdef를 시도하면 불행합니다.#ifdef stdafx.h를 사용할 수없는 이유는 무엇입니까?

#ifdef _WIN32 
#include "stdafx.h" 
#elif _MAC 
#include "MAC/stdafx.h" 
#endif 

왜 Mac 코드에서 stdafx.h를 사용하고 있는지 궁금해 할 수도 있지만 그 때는 중요하지 않습니다. :)

Windows에서 코드를 컴파일하려고하면 다음과 같은 메시지가 나타납니다. 치명적인 오류 C1018. 같은 파일에 다른 헤더 파일을 #ifdef로 묶으려고했지만 컴파일러가 행복했습니다. 따라서 Windows에서 stdafx.h가 # ifdef-ed가 아니거나 Windows에서만 허용하는 것처럼 보입니다. #include stdafx.h 이 파일의 첫 번째 줄로 허용됩니다.

제 질문은 왜입니까? 전원을 끄고 당신이 괜찮을 것 - 당신이 미리 컴파일 된 헤더가 켜져 있기 때문에

답변

10

컴파일러에 미리 컴파일 된 헤더가 포함되어 있으면 기본적으로 헤더 앞에있는 모든 것을 "잊어 버립니다". 따라서 #elif는 #if와 더 이상 일치하지 않습니다.

5

이입니다.