2017-11-24 3 views
3

私は条件付きで何かコンパイルするCプリプロセッサを使用することができます知っている:、私が使用したい言い換えればCプリプロセッサを使用してマクロの値を条件付きでチェックできますか?

#define USEDFEATURE 4 

#if defined USEDFEATURE == 4 
usefeature(4); 
#endif 

#define USESPECIALFEATURE 

#if defined USESPECIALFEATURE 
usespecialfeature(); 
#endif 

をしかし、私はこのような何かを行うことができます場合、私は疑問に思ってプリプロセッサは特定のマクロ定義の値をチェックします。私はそれを試したときにこれは動作しません。

答えて

8

絶対:

#define MACRO 10 

#if MACRO == 10 
enable_feature(10); 
#endif 

ドロップdefineステートメントは、マクロがマクロが特定の値を有するか否か、定義されているかどうかをチェックしました。

あなたも、算術演算の様々なを使用することができます。

#if MACRO > 10 
#if MACRO < 10 
#if MACRO + ANOTHER > 20 
#if MACRO & 0xF8 
#if MACRO^ANOTHER 
#if MACRO > 10 && MACRO < 20 

...とチェーンを条件文:

#if MACRO == 1 
enable_feature(1); 
#elif MACRO == 2 
enable_feature(2); 
#endif 
+0

あなたは識別子が前に定義されている場合、あなたもチェックする必要はありません言及でしたその価値をテストする。 '#if'と'#elif'文では、未定義の識別子はゼロとして扱われます。 –

4

あなたのアイデアは可能ですが、あなたはそれが間違って使用されています。

#define YOUR_MACRO 3 

#if YOUR_MACRO == 3 
    do_job(3); 
#endif 

いいえdefined値と比較したいかどうかを確認します。マクロが定義されていない場合、それは#ifチェックに0と評価されます上記の

#if NOT_DEFINED_MACRO 
do_something(); 
#endif 

コードに等しい:

#if 0 
do_something(); 
#endif 
関連する問題