2012-01-04 6 views
0

config.hで定義されているプリプロセッサ設定オプションの束があります。私はそうのようにそれらを使用します。#ifで何ができますか?

#if CONFIG_OPTION1 
    /* do some stuff */ 
#endif 

config.hのが自分の定義が含まれています

#define CONFIG_OPTION1 _DEBUG 
#define CONFIG_OPTION2 _DEBUG || (NDEBUG && _WIN64) 
... 

以上が動作しません。私はこれらの設定オプションを設定(デバッグ、リリースなど)および/または他の定義に基づいてオンまたはオフにしたいと考えています。また、私がしなければ動作しません:それは満たされる必要があるように条件が見えても、

#define CONFIG_OPTION1 defined(_DEBUG) || defined(NDEBUG) 

は私が#if CONFIG_OPTION1内部で取得することはありません。私は#if defined(_DEBUG)と書いても問題ありませんが、マクロとして#ifが条件として失敗します。これをどうすれば解決できますか?

答えて

2

あなたがすでに気づいたように、あなたはそれをそうすることはできません。代わりに次のようにしてください:

#if _DEBUG || (NDEBUG && _WIN64) 
# define CONFIG_OPTION2 1 
#endif 
+1

+1。 http://gcc.gnu.org/onlinedocs/cpp/Defined.htmlによると、「定義された」演算子がマクロ展開の結果として現れた場合、C標準は動作が未定義であると述べています。 – ruakh

+0

@CatPlusPlusこれを行うと、 '#else'のように' #define'をどこかで '0'にする必要がありますか? – David

+1

@Dave:あなたはする必要はありません。定義されていないマクロ名は自動的にゼロとして解釈されます。 – ruakh

関連する問題