#ifdef と #ifndef のプリプロセッサ ディレクティブは、defined 演算子と一緒に使用しているとき、#if ディレクティブと同じ効果があります。
構文
#ifdefidentifier
#ifndefidentifier
これらのディレクティブは、以下と同じです。
#if definedidentifier
#if !definedidentifier
解説
#ifdef および #ifndef のディレクティブは、#if を使用できるところならどこでも使用できます。 #ifdef identifier ステートメントは、identifierが定義されている場合の#if 1と同じです。 これが #if 0 と等しいのは identifier が定義されていないとき、あるいは #undef ディレクティブによって定義解除されているときです。 これらのディレクティブは、C または C++ ソース コードで宣言された識別子ではなく、#define で定義された識別子の有無を調べます。
これらのディレクティブは、言語の以前のバージョンとの互換性を維持するために用意されています。 #if ディレクティブで使用するdefined( identifier )定数式が推奨されます。
#ifndef ディレクティブは、#ifdef が調べる反対の条件を調べます。 識別子を定義していない場合、またはその定義を #undef で削除した場合、条件は true (ゼロ以外) です。 それ以外の場合、条件は False (0) です。
Microsoft 固有の仕様
identifier は /D オプションを使用してコマンド ラインから渡すことができます。 最大 30 個のマクロを /D で指定できます。
#ifdef ディレクティブが定義の有無を調べるときに便利な理由は、定義をコマンド ラインから渡すことができるからです。 次に例を示します。
// ifdef_ifndef.CPP
// compile with: /Dtest /c
#ifndef test
#define final
#endif
Microsoft 固有の仕様はここまで