#ifdef
および #ifndef
ディレクティブ (C/C++)
#ifdef
と #ifndef
のプリプロセッサ ディレクティブは、defined
演算子と一緒に使用しているとき、#if
ディレクティブと同じ効果があります。
構文
#ifdef
identifier
#ifndef
identifier
これらのディレクティブは、以下と同じです。
#if defined
identifier
#if !defined
identifier
解説
#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 固有の仕様はここまで