2013-07-31 6 views
7

が、私は以下のようなコードの一部を持っているプリコンパイル済みヘッダーと期待動作していないよう。しかし、私が変更するとき#ifdef#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の実行されていない第2の場合には、それは動作しますか?誰が設定が間違っているかもしれないか教えていただけますか?

わからないこの問題あれば、私は事前に視覚的なスタジオに2010年

感謝を使用してい

UPDATE: 私はきれいにし、再実行し、秒1も動作していません。エディタで唯一可能なコードとして表示されます。

プロジェクト - >プロパティ - >構成プロパティ - > 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

ありがとうございました。魔法のようなその仕事:) –