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 手册

与普通参数替换不同,参数不是首先进行宏扩展的。这称为字符串化。

来自同一来源:

如果要对宏参数扩展的结果进行字符串化,则必须使用两级宏。

...继续举一个例子:

 #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 回答