cpp-undefined-macro - プリプロセッサの条件行での未定義マクロの働き
目的
未定義のマクロが、Cプリプロセッサの条件行でどう扱われるかを確認する
結果
未定義マクロXは、以下のように展開される。
- defined(X) => 偽(結局は数値の0)
- マクロ展開 => 数値の0
以下、詳細。
実際に動作させて確認する
#define EXISTING_MACRO #if defined(UNDEFINED_MACRO) undefined-macro is defined. #endif #if defined(UNDEFINED_MACRO)==0 defined(undefined-macro) is zero. #endif #if defined(EXISTING_MACRO)==1 defined(defined-macro) is one. #endif #if UNDEFINED_MACRO==0 undefined-macro is zero. #endif
プリプロセス実行:
% gcc -E -P undef-macro.c | grep . defined(undefined-macro) is zero. defined(defined-macro) is one. undefined-macro is zero.
結果から、未定義マクロはdefined(X)では偽になる(あたりまえ)、マクロとして展開させると数値の0になる(意外)。
また、defined(X)が返すのは、Cと同様に、数値の0か1。