web-dev-qa-db-ja.com

引用符付き文字列内のマクロを展開する

可能性のある複製:
文字列を作成するCマクロ

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

例えば:

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

に等しいだろう

_f("abc #00ff00");
_

しかし、代わりに展開は実行されず、関数は文字通り_abc COLOR_を受け取ります。

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

25
davide

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

#define COLOR "#00ff00"

f("abc "COLOR);

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

37
tomahh
#define COLOR "#00ff00"
f("abc "COLOR);
4
singpolyma