9

私は以下のようなコードの一部を持っています:

#define FEATURE_A 1

void function()
{
// some code

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

// some code

}

プログラムは#ifdef - #endif内のコードを実行しません。しかし、 # ifdef#ifndefに変更して#defineマクロを削除すると、コードが実行されます。以下のコードは期待どおりに動作します。

//#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 番目のケースでは機能する理由を誰かが説明できますか? 誰がどの設定が間違っている可能性があるか教えてもらえますか?

これが問題かどうかはわかりませんが、Visual Studio 2010 を使用しています。

前もって感謝します

更新: クリーンして再実行すると、2番目のものも機能しません。有効にしたコードとしてエディターに表示されるのはその唯一です。

project->property->Configuration Properties-> c/c++ -> Preprocessor でマクロを定義すると、両方とも正常に動作します。

4

2 に答える 2

15

これは、Microsoft がプリコンパイル済みヘッダーを実装する方法が原因である可能性があります。あなたは実際に持っています

#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

}

プリコンパイル済みヘッダーの後に移動すると、すべてが機能します。

#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

}
于 2013-07-31T05:25:53.610 に答える