0

いくつ#define NAME nameかのマクロがあり、引用された値に展開される他のマクロを定義したいとします。つまり、あたかも も定義したかのようです#define NAME_STR "name"。以下よりもきちんとした方法はありますか?

#define QUOT(str)   #str
#define QUOT_ARG(str)   QUOT(str)
#define NAME_STR    QUOT_ARG(NAME)
4

1 に答える 1

2

文字列化で使用される場合、マクロ引数は展開されないため、そうではありません。GNU C PreProcessor マニュアルから:

通常のパラメータ置換とは異なり、引数は最初にマクロ展開されません。これを文字列化と呼びます。

同じソースから:

マクロ引数の展開結果を文字列化する場合は、2 レベルのマクロを使用する必要があります。

...例を続けます:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4"
于 2011-04-01T22:55:20.007 に答える