首页 > 编程知识 正文

c语言宏定义的几个坑和特殊用法,c语言对宏定义的处理

时间:2023-05-04 09:51:02 阅读:260396 作者:1991

最近撸代码过程中要用到一个数的绝对值,为了图方便直接定义了一个宏来求绝对值,定义如下:

#define ABS(x) ((x)>0?(x):(-(x)))

最开始使用没有发现啥问题,一切正常,直到某一天我使用两个无符号数来求绝对值,演示代码如下:

#include <stdio.h>#define ABS(x) ((x)>0?(x):(-(x)))int main(){ unsigned int a = 1; unsigned int b = 2; int c = ABS(a - b); printf("c = %dn",c); return 0;}

预期打印出来的是1的,结果打印出来是-1,把自己搞懵了,想不明白,后面请教网友才知道原因。原因就是两个无符号数相减结果为无符号数,即这里问号表达式为真,所以为-1;

写这篇博文就是提醒大家用宏的时候一定要注意,我还是用库函数abs去了。。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。