オブジェクトタイプマクロでは、以下のことが可能です。
#define str "this is a string"
このタイプの文字列リテラルを次のような関数型マクロで使用できるかどうかを知りたいのですが、
#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")
これを実行してエラーが発生しましたが、関数型マクロの置換シーケンスで定数を使用する方法はありますか?
オブジェクトタイプマクロでは、以下のことが可能です。
#define str "this is a string"
このタイプの文字列リテラルを次のような関数型マクロで使用できるかどうかを知りたいのですが、
#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")
これを実行してエラーが発生しましたが、関数型マクロの置換シーケンスで定数を使用する方法はありますか?
はい。文字列を一緒に配置するだけです。C言語はそれを文字列定数の連結として受け入れます。
#define str(s1,s2) s1 s2 "extra"
あなたの例では、#definedstrが2回あるという問題があります。
#define str "this is a string"
#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")
これを次のように変更してみてください。
#define str_const "this is a string"
#define str(s1,s2) s1 s2 "extra")
そうすれば、それはあなたにとってより明確になると思います。次のような文字列を作成する場合this is a string extra
は、上記のマクロでそれを実行するマクロを次に示します。
#define str(s1) str_const "extra"