c语言 宏的一些深层应用(##,#,宏函数)

"##" 宏拼接

#define CONCATENATE(a, b) a ## b
CONCATENATE(student_, 1) // 将a和b拼接起来变成一个新的变量 -> student_1
#define CONS(a,b) int(a##e##b)
CONS(2,3) //将aeb拼接起来 -> 2e3 == 2000

"#" 转换为字符串

#define CONCATENATE(a, b) a ## b
#define STR(s) #s
STR(CONCATENATE(student_, 1))// 将a和b拼接起来变成一个新的变量 -> student_1 再转换为字符串 -> "student_1"

哈哈,你觉得上面注释说的是对的吗?nonono,我在编译器尝试用printf("%s", STR(CONCATENATE(student_, 1)));输出了一下,输出是CONCATENATE(student_, 1)。这个优先级问题本文就先不讨论啦,有兴趣的朋友可以自己去看看优先级的问题。
那如果我就是要输出student_1怎么办呢?起始很简单看我下面操作!

#define CONCATENATE(a, b) a ## b
#define _STR(s) #s
#define STR(s) _STR(s)

这时候编译器的输出就是我们期望的student_1了。至于原理,咱也不敢问,但是知道有这个用法就行了。

宏函数

// #define 宏名称( [形参列表] ) 替换文本
#define DOUBLE(x) (x+x)
#define MAX(a,b) ((a)>(b)?(a):(b))

更多内容请参考以下文章:
https://blog.csdn.net/m0_62918577/article/details/127361768
https://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html
https://blog.csdn.net/weixin_46187354/article/details/133611969

posted @   小兜兜me  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2021-09-19 express请求数据的获取(get和post)body-parser
2021-09-19 防止npm被墙的小技巧
2021-09-19 npm包管理工具 --save和--save-dev的区别
点击右上角即可分享
微信分享提示