You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:40:27