取消宏定义定义变量的时候,不能够重复定义同名变量;同理,定义宏的时候,不可以重复定义同名的宏 。例如:
#define MAX 1000
#define MAX 50
此时,重复定义MAX宏,是不合法的代码 。但是,我们想在代码中,对MAX宏进行多次不同的定义,应该怎么样?
此时,可以考虑使用#undef来取消之前的宏定义,然后,再重新定义宏 。程序测试例子如下:
![C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?](http://img.jiangsulong.com/220428/130Q64001-0.jpg)
文章插图
【C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?】程序运行结果如下:
![C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?](http://img.jiangsulong.com/220428/130QC226-1.jpg)
文章插图
可以看到,在程序中,对MAX宏进行了多次定义 。在重新定义MAX宏之前,先使用#undef关键字来取消宏的定义,然后,再重新定义宏 。
有参宏定义定义宏的时候,可以携带参数,如同定义函数一样,有形参列表 。定义格式如下:
#define 宏名(形参列表) 表达式
注意:这里的形参列表,与函数的形参列表有区别 。函数的形参列表有变量的数据类型名,这里定义宏的形参列表,不需要数据类型名 。使用带参数宏时,如果需要传递参数,调用方法如同调用函数一样 。程序测试例子如下:
![C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?](http://img.jiangsulong.com/220428/130QC500-2.jpg)
文章插图
程序运行结果如下:
![C语言预编译处理,如何定义一个带参数 宏?如何取消宏定义?](http://img.jiangsulong.com/220428/130QB5M-3.jpg)
文章插图
可以看到,编译程序预处理的时候,碰到 print(10, 11);宏,就对宏进行替换展开,替换为:
printf("x = %d, y = %dn", x, y);
但是,x, y 符号是宏的参数,所以,需要进行替换 。根据宏定义的参数顺序是 print(x, y);所以,在调用print(10, 11)宏的时候,按顺序替换,使用10替换x,11替换y 。
推荐阅读
- 怎样预防感冒 5大食疗良方让你远离它
- 五菱|五菱凯捷小弟来了!全新佳辰预售:7个座、6.98万起
- 预防腮腺炎的疫苗有哪些
- 无线路由器|别担心Wi-Fi 6路由会被淘汰了!Wi-Fi 7还早着:预计要5年才普及
- 乳腺增生喝咖啡好吗,乳腺增生的预防方法
- |真是知人知面不知心,河边钓鱼多预防这样的人
- 怎么消灭蜈蚣和预防蜈蚣来犯 怎么消灭蜈蚣最有效
- 教你使用Python预测天气
- CentOS7下编译安装PHP8.0.7
- Vue中使用v-viewer组件实现图片预览功能,支持Vue3