cpp-undefined-macro - プリプロセッサの条件行での未定義マクロの働き

目的

未定義のマクロが、Cプリプロセッサの条件行でどう扱われるかを確認する

結果

未定義マクロXは、以下のように展開される。

  • defined(X) => 偽(結局は数値の0)
  • マクロ展開 => 数値の0

以下、詳細。

実際に動作させて確認する

undef-macro.c
https://sssvn.jp/svn/spikelet/c/cpp-if-parser/spec-check/undef-macro.c
#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。