C语言中的宏定义:#define的使用与括号的重要性
创作时间:
作者:
@小白创作中心
C语言中的宏定义:#define的使用与括号的重要性
引用
CSDN
1.
https://m.blog.csdn.net/weixin_55341642/article/details/141869946
何为宏
在C语言中,#define
机制允许将参数替换到文本中,这种实现通常被称为宏。宏是一种预处理指令,可以在编译之前对代码进行文本替换,从而实现代码的复用和简化。
宏的声明及其使用方式
声明代码演示
#define MAX(x,y) ((x)>(y)?(x):(y))
使用代码演示
int a = 3;
int b = 5;
int max = MAX(a, b);
代码解析
在程序预处理阶段,MAX(a, b)
会被替换为:
int max = ((a)>(b)?(a):(b));
宏中的括号是否多余
提问
在宏定义中,为什么每个变量都加上了括号?这些括号是否可以去掉?
代码演示
不加括号的宏定义:
#define MUL(x,y) x * y
加上括号的宏定义:
#define MUL(x,y) ((x) * (y))
使用代码演示
int a = 3;
int b = 5;
int sum = MUL(a + b, b - a);
代码解析
预期结果是计算a + b
的和与b - a
的差的乘积,即8 * 2 = 16
。
不加括号代码验证
如果不加括号,宏展开后会变成:
int sum = a + b * b - a;
这会导致优先级问题,计算结果不符合预期。
加上括号代码验证
加上括号后,宏展开为:
int sum = ((a + b) * (b - a));
这样就能正确计算出预期的结果。
结论
从代码验证中可以看出,不加括号的结果与预期结果大相径庭。出现这一问题的原因有两点:
- 宏是完完全全的替换,替换前并不会进行计算,所以是直接将
a + b
和b - a
替换到宏中,这样就会出现优先级的先后问题。 - 宏中的变量不一定是简单的变量,有可能是表达式,也有可能是函数等。
因此,在声明宏的时候,最好加上必要的括号,以免出现优先级问题。
热门推荐
塔罗牌中的恋人牌VI:象征意义和含义的完整指南
6个因素最容易患口腔溃疡,早期做好3类预防,防止复发
宋元花鸟画艺术特色及嬗变
电饭锅蒸馒头完全指南:时间、方法与技巧
3D打印与超精密加工:现状、机遇和未来展望
无线连接,蓝牙模块在血氧仪中实现实时监测
腰部有个硬疙瘩怎么回事
赵露思零片酬出演《小小的勇气》引热议,公益探索还是营销作秀?
图解统计学:一文轻松搞懂基础概率+描述性统计
运动后喝蛋白粉的好处和坏处
个人奋斗的源动力:梦想与责任
泽西长毛兔常见疾病及预防措施
CBA第45轮排名出炉!新疆反超辽宁,广东跌至第7,上海进八强无望
心肌梗死后的快速康复,你还需要了解这些
世界心脏日:长沙市中心医院举办科普义诊活动,专家和病友共话“心脏康复”
三国时期,蜀汉的人口究竟有多少?还不如现在的一个地级市!
高帧率游戏对电脑硬件有什么特别要求?
抑郁症丧失行动力怎么解决
自动驾驶系统工程师:驾驭未来交通的先锋
学习、模仿、改编:将所学应用到自己的世界
德恒上市公司并购案例汇第三期:易普力重组南岭民爆,A股借壳之路在何方?
空调显示E9故障解析及处理方法(E9故障代码的含义和解决方案)
和平精英游戏中,ping值多少才算是正常的网络延迟?
解析Android微信中的表情:乐趣、技巧与社交文化关系
组装电脑超详细步骤,零基础入门到精通,收藏这一篇就够了
B级轿车的「厚重感」,正被时代抛弃
颅咽管瘤无症状怎么发现?需要治疗吗?
中医解析麝香保心丸:功效与使用注意事项
姚明领导下中国篮球面临的最大挑战与未来发展方向分析
Windows 10开机黑屏怎么办?这份指南帮你轻松解决!