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

C语言中使用宏定义命名函数的问题求助

解决C宏定义中标识符拼接的问题

你遇到的这个问题,本质是C预处理器不会自动把宏参数和相邻的标识符拼接成新名称——你原来的写法里,add_name会被预处理器当成一个完整的标识符,而不是add_加上参数name的组合。

正确的解决方案:使用##令牌拼接运算符

C预处理器提供了##运算符,专门用来将两个令牌(比如标识符、宏参数)合并成一个新的标识符。修改你的宏定义如下:

#define DEF_ADD(name) \
int add_##name(int x, int y) { \
    return x + y; \
}

当你调用DEF_ADD(hello)时,预处理器会先把参数name替换为hello,再通过##把add_和hello拼接成add_hello,最终展开后的代码就是你期望的:

int add_hello(int x, int y) {
    return x + y;
}

补充说明

为什么原来的写法不生效?因为预处理器处理宏体时,只有独立的宏名(比如单独写name)才会被替换成参数值。而add_name是一个连续的标识符,预处理器不会拆分它去匹配参数name,必须用##明确指示要进行拼接操作。

内容的提问来源于stack exchange,提问作者hiy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:23:33