1

マクロ置換で値を指定しない場合。

#define YES
printf("%d",YES)

YES の値が指定されていません。デフォルトでは 0 ですか、それともガベージですか?

4

5 に答える 5

6

YES を Nothing に定義しまし。したがって、プリプロセッサの後の結果プログラムは次のようになります。printf("%d",)

于 2013-06-09T07:18:44.807 に答える
2

いいえ、価値はありません。

この使用法は通常、次のような状況で役立ちます。

#define _VXWORKS

後で、マクロが定義されているかどうかを確認します。

#ifdef _VXWORKS
//do something
#else
//do something else
#endif
于 2013-06-09T07:19:25.477 に答える
2

それがコンパイルされることに私は驚くだろう

コンパイラにヒットするコードは

printf("%d",)

!!

于 2013-06-09T07:22:00.017 に答える
2

C プリプロセッサはトークンで動作します。のマクロ定義はYES、トークン YES をトークンなしに置き換え、事実上 YES トークンを削除することを示しています。したがって、マクロ置換後の結果は

 printf ("%d",)

あなたが観察したように、これは構文エラーです。

初期化されていない自動変数とは異なり、マクロ置換は常に適切に定義されているため、マクロ展開の結果として不確定な値 (「ガベージ」) を持つことはできません。

于 2013-06-09T07:25:53.413 に答える
1

なし

GCC を使用します。次のように見つけることができます。 gcc prog.c -E -P

于 2013-06-09T07:20:25.553 に答える