39

重複の可能性:
文字列を作成するためのCマクロ

char*次のようなタイプの引数を1つ受け入れる関数がありますf("string");
。文字列引数が関数呼び出しでその場で定義されている場合、文字列本体内でマクロをどのように展開できますか?

例えば:

#define COLOR #00ff00
f("abc COLOR");

と同等になります

f("abc #00ff00");

ただし、代わりに展開は実行されず、関数は文字通り。を受け取りabc COLORます。

特に、マクロを正確に展開して、この引用符で囲まれたトークンが、引用符を含めて\"#00ff00\"渡された残りの文字列引数と連結されるようにする必要があります。f()つまり、プリプロセッサは仕事を終えて、コンパイラがコードをからf("abc COLOR");に変換することを歓迎する必要があります。f("abc \"#00ff00\"");

4

2 に答える 2

51

文字列内のマクロを展開することはできませんが、書くことはできます

#define COLOR "#00ff00"

f("abc "COLOR);

この連結はCプリプロセッサによって行われ、変数などではなく、プレーンな文字列を連結するための機能にすぎないことに注意してください。

于 2012-10-18T16:06:40.520 に答える
4
#define COLOR "#00ff00"
f("abc "COLOR);
于 2012-10-18T16:07:35.757 に答える