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
替换到宏中,这样就会出现优先级的先后问题。 - 宏中的变量不一定是简单的变量,有可能是表达式,也有可能是函数等。
因此,在声明宏的时候,最好加上必要的括号,以免出现优先级问题。
热门推荐
财务管理制度的利润计算与利润测算
黑眼圈太重了太黑了怎么去掉冷敷行不
养猫家庭适合种植哪些大型花卉植物?如何确保安全?
邻居鞋架堵楼道害人摔骨折!律师:这样取证让他赔8.7万!
4K 8K液晶显示屏全解析:分辨率、像素密度、面板类型等关键要素详解
如何用C语言解析HTML
适合新手品尝的十大日常口粮雪茄
显卡分类及特性详解
公版与非公版显卡有什么区别
如何巧妙设计网站名称,打造品牌辨识度的关键步骤
软件定制:打造专属解决方案的终极指南
银耳怎么能煮出“胶质”?只要放对“水”,胶质多而浓稠
如何进行有效的房产市场趋势预测?这种预测有哪些市场趋势分析方法和预测模型?
去英国机票价格全攻略:从基本价格到购票技巧
2024年电子商务师证报考条件及职业前景
红烧鱼家庭做法,鲜美的口感和浓郁的味道赢得了广大食客的喜爱。
李嘉诚抛售港口:商业理性与道德期待的冲突
2024-25年全球工资报告:工资不平等现象仍在持续
厂里社保如何进行缴纳?这种缴纳方式有哪些规定?
打卡点+6,广州6条岭南特色美丽乡村精品示范村通过验收
提升法律论证效果:修饰证据的运用与关键词寻找
吱吱小说哪部小说最好看?3部拍成剧,谭松韵《锦心似玉》原著最好看
路由器的几种工作模式
医院骗保案件:法律视角下的剖析与反思
游戏化怎么才能让生活更美
高度近视配镜度数建议:1.0还是0.8好?需要降度数吗?
狗和虎的父子缘分:生肖相合还是性格相投?
芯片行业,一般招收什么专业的学生
碳酸钠是碱还是盐
Excel中如何计算平均绝对偏差(MAD)