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
相关产品推荐
相关产品推荐

