如何在C预处理器宏的替换列表中使用字面量'#'字符?
在C预处理器宏中使用字面量'#'的方法
直接在宏替换列表中写#会被预处理器识别为字符串化操作符,无法直接作为字面量使用,但可以通过间接定义的方式实现需求:
可行方案:定义单独的宏表示字面量#
先定义一个宏专门指代#字符,再在目标宏中引用它:
// 定义代表字面量#的宏 #define LITERAL_HASH # // 目标宏 #define foo(p1, p2) p1 LITERAL_HASH p2 // 调用宏 foo(arg1, arg2)
预编译后会生成预期结果:
arg1 # arg2
为什么之前的嵌套宏会报错?
你尝试的嵌套宏写法:
#define metafoo(p1, p2, p3) p1 p2 p3 #define foo(p1, p2) metafoo(p1, #, p2)
报错原因是:在foo的宏定义中,#出现在宏参数的位置,预处理器会将其当作字符串化操作符,要求后面必须紧跟一个宏参数,因此触发'#' is not followed by a macro parameter错误。而将#放在单独的宏替换列表中时,由于没有紧跟宏参数,预处理器会将其视为普通字符。
内容的提问来源于stack exchange,提问作者swapfile3
相关产品推荐
相关产品推荐

