マクロ置換で値を指定しない場合。
#define YES
printf("%d",YES)
YES の値が指定されていません。デフォルトでは 0 ですか、それともガベージですか?
YES を Nothing に定義しました。したがって、プリプロセッサの後の結果プログラムは次のようになります。printf("%d",)
いいえ、価値はありません。
この使用法は通常、次のような状況で役立ちます。
#define _VXWORKS
後で、マクロが定義されているかどうかを確認します。
#ifdef _VXWORKS
//do something
#else
//do something else
#endif
それがコンパイルされることに私は驚くだろう
コンパイラにヒットするコードは
printf("%d",)
!!
C プリプロセッサはトークンで動作します。のマクロ定義はYES
、トークン YES をトークンなしに置き換え、事実上 YES トークンを削除することを示しています。したがって、マクロ置換後の結果は
printf ("%d",)
あなたが観察したように、これは構文エラーです。
初期化されていない自動変数とは異なり、マクロ置換は常に適切に定義されているため、マクロ展開の結果として不確定な値 (「ガベージ」) を持つことはできません。
なし
GCC を使用します。次のように見つけることができます。
gcc prog.c -E -P