完美实现C语言比较两个数大小的宏定义
2023-06-01 17:20:35来源:面包芯语
宏定义会在编译的时候进行替换展开,最好将宏中的参数用括号括起来。这样就避免了当一个表达式同时含有宏定义和其他高优先级运算符时,破坏整个表达式的运算顺序 。
(资料图片)
上边的答案解决了一些问题,但会不会存在其他漏洞呢?如果我们用这个宏进行比较:
在语句表达式中,定义了两个局部变量 _x
、_y
来存储宏参数 x 和 y 的值,然后用 _x
、_y
比较大小。这样就避免了两次自增运算引起的问题。
然而,上边的宏定义中,也存在不足,你知道是什么吗?
那就是,临时变量的数据类型为 int 型。也就是说,这个宏定义只能比较两个整型数据。
如何完善这个宏定义,使其能够支持任意类型的数据比较大小呢?
当然,我们可以这样写:
但是,这个宏就有三个参数了,每次比较数据大小,还需要将参数类型 type 传进去。
别着急,肯定有办法弥补这个不足。也就是,想办法获取比较数据的类型。
对于 GNU C 来说,没问题。因为它扩展了一个关键字 typeof,可以获取数据类型。对于其他版本的 C 语言,需要查看手册进行考证,在此不展开介绍。
最终的优化结果如下:
一是用来给用户提示一个警告。对于不同类型的指针比较,编译器会发出一个警告,提示两种数据的类型不同。
二是两个数进行比较运算,运算的结果却没有用到,有些编译器可能会给出一个 warning,加一个(void)后,就可以消除这个警告。
相关新闻
- 完美实现C语言比较两个数大小的宏定义
- 精选!176比特!“祖冲之号”量子计算云平台上线
- 开设药学咨询门诊 便民服务惠百姓
- 彩泥手工制作大全图片(父亲节手工制作大全)_环球今头条
- 当前讯息:创业板病毒检测股票一览表_附:代码
- 豫能控股:公司积极跟踪虚拟电厂建设相关信息 暂未有相关规划
- 天机控股因购股权获行使发行720万股
- 华引芯UVC产品在万科智慧商业广场投入使用
- 吉利银河L7上市,13万+起,20万的领克08还会远吗?
- 每日简讯:北京二手房市场降温众生相:换房业主调低预期求成交 买方观望“再等等”
- 观速讯丨开普云(688228)5月31日主力资金净买入1522.44万元
- 当前视讯!苹果手机均价一直涨,消费者热情不减,国产手机破局之路何去何从
- 甲烷燃烧_甲烷 全球通讯
- ps中的栅格化图层是什么意思 PS栅格化图层什么意思
- 环球滚动:长沙冰雪世界暑假工(长沙冰雪世界)
- 天天讯息:初夏微风润石堤 结对共建促发展
- 5.31|《蜘蛛侠:纵横宇宙》超前点映️
- sofun怎么读_sofun 焦点快报
- 一线城市仅剩1家门店 陈赫创办的贤合庄火锅门店继续收缩 世界热点评
- “东数西算”一周年,韶关算出了什么?