Macros 引用宏参数的预处理器
假设我有一个宏Macros 引用宏参数的预处理器,macros,c-preprocessor,stringification,Macros,C Preprocessor,Stringification,假设我有一个宏#define NAME,我想定义另一个宏,它将扩展到引用的值。也就是说,好像我也定义了#define NAME_STR“NAME”。有没有比下面更整洁的方法 #define QUOT(str) #str #define QUOT_ARG(str) QUOT(str) #define NAME_STR QUOT_ARG(NAME) 不太可能,因为在字符串化中使用宏参数时不会展开。从: 与正常的参数替换不同, 参数不是宏展开的 第一。这就是所谓的严格化 来自同一来源:
#define NAME
,我想定义另一个宏,它将扩展到引用的值。也就是说,好像我也定义了#define NAME_STR“NAME”
。有没有比下面更整洁的方法
#define QUOT(str) #str
#define QUOT_ARG(str) QUOT(str)
#define NAME_STR QUOT_ARG(NAME)
不太可能,因为在字符串化中使用宏参数时不会展开。从: 与正常的参数替换不同, 参数不是宏展开的 第一。这就是所谓的严格化 来自同一来源: 如果你想把结果串起来 宏参数的展开,您可以 必须使用两级宏 …下面是一个例子:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
str (foo)
==> "foo"
xstr (foo)
==> xstr (4)
==> str (4)
==> "4"
该示例具有误导性:
foo
在替换列表中使用之前不会被宏替换为4
,因此它应该是xstr(foo)
变成str(4)
变成“4”
。我认为,如果说有一点你有xstr(4)
,那就是误导。@James McNellis:同意,这个例子暗示了一些类似于自引用宏的东西,以后不会扩展。我想知道我是应该编辑这个例子还是留下它,以及这些评论。。。