#ifdef および #ifndef ディレクティブ (C/C++)

#ifdef#ifndef のプリプロセッサ ディレクティブは、defined 演算子と一緒に使用しているとき、#if ディレクティブと同じ効果があります。

構文

#ifdef identifier
#ifndef identifier

これらのディレクティブは、以下と同じです。

#if defined identifier
#if !defined identifier

解説

#ifdef および #ifndef のディレクティブは、#if を使用できるところならどこでも使用できます。 #ifdefidentifier ステートメントは、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 固有の仕様はここまで

関連項目

プリプロセッサ ディレクティブ