2013-07-31 1 views
7

내가 다음과 같은 코드의 일부를 미리 컴파일 된 헤더 예상 작동하지 않는 것처럼. 그러나 내가 바꿀 때 #ifdef to #ifndef 그리고 #define 매크로를 제거하면 코드가 실행됩니다. 아래 코드는 예상대로 작동합니다.는 #ifdef와

//#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifndef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 

#ifdef와 내부의 첫 번째 경우 코드에서 왜 사람이 설명 할 수 - #endif 다음 으로 수행되지 않을 두 번째 경우에 작동? 누구나 잘못된 설정이 무엇인지 말해 줄 수 있습니까?

확실하지 않음이 문제 경우, 내가 사전에 비주얼 스튜디오 2010을

감사를 사용하고

UPDATE : 나는 깨끗하고 다시 실행, 두 번째는 작동하지 않습니다. 에디터에서 유일하게 사용 가능한 코드로 보여줍니다.

프로젝트 -> 속성 -> 구성 속성 -> c/C++ -> 전 처리기에서 매크로를 정의하면 둘 다 정상적으로 작동합니다.

+1

당신이 어딘가에'#undef를 FEATURE_A'이없는 것이 확실 : 당신은 실제로 미리 컴파일 된 헤더 모든 작업 후

#define FEATURE_A 1 #include "stdafx.h" // <- all code even ascii art before that line is ignored. void function() { // some code #ifdef FEATURE_A // code to be executed when this feature is defined #endif // some code } 

이동 그것을 가지고? – mvp

+1

전처리 후에 코드를보고 싶다면'-E' 플래그로 컴파일하십시오. – aaronman

+0

그렇지 않으면 아무런 의미가 없으므로이 동작을 나타내는 전체 프로그램을 게시해야합니다. –

답변

10

Microsoft가 미리 컴파일 된 헤더를 구현하는 방법 때문일 가능성이 큽니다.

#include "stdafx.h" // <- all code even ascii art before that line is ignored. 
#define FEATURE_A 1 

void function() 
{ 
// some code 

#ifdef FEATURE_A 
    // code to be executed when this feature is defined 
#endif 

// some code 

} 
+0

고마워요. 마법과 같은 작품 :) –