2017-07-22 7 views
-3

は、私の知る限りでは、#ifdefはマクロが定義されている場合、マクロは次のように定義されていないものを確認することができます。マクロが特定のものとして定義されていることを確認する方法はありますか?

#define MY_NUMBER 1 
. 
. 
. 
#ifdef MY_NUMBER 
function(); 
#endif 

私はこのような何か試してみた:

#define MY_NUMBER 1 
. 
. 
. 
#ifdef MY_NUMBER 1 
function(); 
#endif 

をし、コンパイラは、次を発行します。

warning: extra tokens at end of #ifdef directive 

とマクロの値は、(考慮されていませんそれはちょうど無視されます)。マクロが特定の値を持つ場合

はどうやってチェックしますか?

+2

'#ifdefのMY_NUMBERを1 ' - >' #if MY_NUMBER == 1' – BLUEPIXY

答えて

3

条件文では、あなたのプリプロセッサディレクティブでの平等(==)または不等号(</>/<=/>=)を使用できるのと同じように:

#if MY_NUMBER == 1 
    function1(); 
#elif MY_NUMBER == 2 
    function2(); 
#else 
    function3(); 
#endif 
+0

それは数字には効果がありましたが、数字以外の数字はどうやって確認するのですか? (例えば、プラットフォームWindowsの#ifdef) –

+1

user_194421 @、あなたのオリジナルのコメントが、残念ながら、Cは文字列をネイティブにサポートしていない、と本当にプリプロセッサとそれらを比較することはできません、「文字列を」と述べ、及び。通常、プラットフォームをチェックするには 'ifdef'を使うだけです。 –

+1

しかし 'WINDOWS'は、トークン(さらに重要なこと、それは[識別子に貼り付けることができるトークン]です(https://godbolt.org/g/tQeRL1))だ...文字列ではありません。 (実際にこの技術を使用するプラットフォームテストではありません。) –

関連する問題