1

オブジェクトタイプマクロでは、以下のことが可能です。

#define str "this is a string"

このタイプの文字列リテラルを次のような関数型マクロで使用できるかどうかを知りたいのですが、

#define mkstr(a) #a
#define str(s1,s2) mkstr(s1 ## s2 ## "extra")

これを実行してエラーが発生しましたが、関数型マクロの置換シーケンスで定数を使用する方法はありますか?

4

2 に答える 2

4

はい。文字列を一緒に配置するだけです。C言語はそれを文字列定数の連結として受け入れます。

#define str(s1,s2)   s1 s2 "extra"
于 2012-06-26T09:46:03.333 に答える
0

あなたの例では、#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"
于 2012-06-26T11:21:59.480 に答える