预处理器引用宏参数

时间:2011-04-01 22:49:18

标签: macros c-preprocessor stringification

假设我有一些宏#define NAME name,我想定义一些其他宏,它将扩展到引用值。也就是说,好像我也定义了#define NAME_STR "name"。是否有比以下更简洁的方式?

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

1 个答案:

答案 0 :(得分:2)

不是真的,因为在字符串化中使用宏参数时不会扩展。来自GNU C PreProcessor manual

  

与普通参数替换不同,   这个论点不是宏观扩展的   第一。这称为字符串化。

来自同一来源:

  

如果要将结果字符串化   扩展一个宏论证,你   必须使用两个级别的宏。

...继续举例:

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4"