可能性のある複製:
文字列を作成するCマクロ
f("string");
のような_char*
_型の引数を1つ受け入れる関数があります
文字列引数が関数呼び出しでその場で定義されている場合、マクロを文字列本体内でどのように展開できますか?
例えば:
_#define COLOR #00ff00
f("abc COLOR");
_
に等しいだろう
_f("abc #00ff00");
_
しかし、代わりに展開は実行されず、関数は文字通り_abc COLOR
_を受け取ります。
特に、マクロを正確に_\"#00ff00\"
_に展開する必要があるため、この引用符付きトークンは、f()
に渡される文字列引数の残りと連結され、引用符が含まれます。つまり、プリプロセッサは仕事を終え、コードをf("abc COLOR");
からf("abc \"#00ff00\"");
に変換するコンパイラを歓迎する必要があります
文字列内のマクロを展開することはできませんが、書くことができます
#define COLOR "#00ff00"
f("abc "COLOR);
この連結はCプリプロセッサによって行われ、プレーン文字列を連結する機能であり、変数などではないことに注意してください。
#define COLOR "#00ff00"
f("abc "COLOR);