#ifdef および #ifndef プリプロセッサ ディレクティブは、defined 演算子で使用される場合、#if ディレクティブと同じ効果を持ちます。
Syntax
#ifdefidentifier
#ifndefidentifier
これらのディレクティブは、次に相当します。
#if definedidentifier
#if !definedidentifier
Remarks
#ifdefディレクティブと#ifndef ディレクティブは、#if使用できる任意の場所で使用できます。
#ifdef
identifier ステートメントは、identifierが定義されている場合の#if 1と同じです。
identifierが定義されていない場合や、#undef ディレクティブによって未定義になっている場合の#if 0と同じです。 これらのディレクティブは、C または C++ ソース コードで宣言された識別子ではなく、 #defineで定義された識別子の有無のみをチェックします。
これらのディレクティブは、以前のバージョンの言語との互換性のためにのみ提供されます。
#if ディレクティブで使用するdefined(identifier)定数式を使用することをお勧めします。
#ifndef ディレクティブは、#ifdefによってチェックされる条件の反対をチェックします。 識別子が定義されていない場合、またはその定義が #undef で削除されている場合、条件は true (0 以外) になります。 それ以外の場合、条件は false (0) です。
Microsoft 固有の仕様
識別子は、/D オプションを使用してコマンド ラインから渡すことができます。
/Dでは、最大 30 個のマクロを指定できます。
#ifdef ディレクティブは、定義をコマンド ラインから渡すことができるため、定義が存在するかどうかを確認する場合に便利です。 例えば次が挙げられます。
// ifdef_ifndef.CPP
// compile with: /Dtest /c
#ifndef test
#define final
#endif
Microsoft 固有の仕様はここまで