5

#if TRUEのようなステートメントを使用すると、どうなるでしょうか?説明は非常に高く評価されるだろう!私は#if 1の仕組みを理解していますが、#if TRUEを使用するよりも私のコードで完全に異なる結果が得られます。私は#ifが条件付きの指示であることを理解しています。私が理解していないのはTRUE(またはFALSE)の部分だけです。このようにして使用すると、ステートメントに続くコードは決して実行されないようです。次に例を示します。C++、#if TRUE条件付きディレクティブを使用

#if TRUE 
    cout << "true" << endl; 
#endif 

#if FALSE 
    cout << "false" << endl; 
#endif 

私は画面に出力およびVisual Studioを使用して「true」または「false」を参照してくださいように見えることはありません、内側の文が自動的にグレー表示されます。 trueまたはfalse印刷を確認するには

+0

マクロが宣言されているかどうかをテストするだけです。通常、WinDef.hではBOOLで使用すると宣言されています。 –

+0

"TRUE"は予約語ではありませんか? – Hieli

+2

いいえ、#define winDef.hで宣言されたマクロです(http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspxを参照)。予約語は "true"(小文字)です。 –

答えて

5

プリプロセッサーは、#ifがtrueまたはfalseと評価された後の式に応じて、#if #endifブロックの内容を含める/除外します。

  • マクロTRUETRUE!= 0
あなたの例では

TRUEFALSEので、両方のブロックを定義しているどちらの

  • 値を定義されている場合

    #if TRUEは唯一の真と評価されます偽で除外されます。

  • +0

    ありがとうございます!これは非常に役に立ちました。 – Hieli

    0

    あなたはそれらを定義する必要があります。

    #define TRUE 1 
    #define FALSE 1 
    

    #if TRUE#if FALSE#if 1と同じになります。

    +1

    私はFALSEを1と定義したのは初めてでした... – FatalError

    +0

    FALSEを0と定義する答えを変更しました –

    +0

    しかし、もっと長い;)。 – FatalError

    4

    TRUEFALSEマクロのWindowsでですが、WinDef.hで宣言されました。

    ヘッダーを含めると、TRUE1で、FALSE0であることがわかります。したがって、最初の文は実行する必要があり、2番目の文は実行しないでください。

    ヘッダーを含めないと、両方が定義されず、どちらのステートメントも実行されません。

    +0

    非常に感謝!ありがとうございました! – Hieli

    関連する問題