假设我有一些宏#define NAME name
,我想定义一些其他宏,它将扩展到引用值。也就是说,好像我也定义了#define NAME_STR "name"
。是否有比以下更简洁的方式?
#define QUOT(str) #str
#define QUOT_ARG(str) QUOT(str)
#define NAME_STR QUOT_ARG(NAME)
答案 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"