宏是另一个宏的参数时,宏定义有 #与## 不会展开

博客详细讨论了C语言中预处理宏的用法,特别是`#`和`##`运算符在宏拼接中的作用。通过示例展示了如何正确使用`#define`创建转换宏,以将数字转换为字符串,并实现两个参数的拼接。文章强调了预处理宏展开的过程,帮助读者理解实际的编译结果。
摘要由CSDN通过智能技术生成

遇到了这个问题的解决方法:

添加一个转换的宏就行

:#define toS(A)  #A

:#define N  66

:#define Join(a,b) (a##b)

printf("%s\n",toStr(N)); //预想结果--->"66"   实际结果:N

printf("%d\n",SJoin(N,N)); //预想结果--->6666   实际结果:NN

添加一个转换

:#define toS(A)  #A

#define _toS(A) toStr(A)

#define _Join(a,b) (a##b)

:#define Join(a,b) _S(a,b)

:#define N  66

printf("%s\n",toS(N)); //预想结果--->"66"   实际结果:"66"

printf("%d\n",Join(N,N)); //预想结果--->6666   实际结果:6666

展开的意思是:toS(N)  ---> _toS(66) --->#66--->"66"

展开的意思是:Join(N,N)  ---> _Join(66,66) --->66##66--->6666

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值