最近撸代码过程中要用到一个数的绝对值,为了图方便直接定义了一个宏来求绝对值,定义如下:
#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 = %d\n",c);
return 0;
}
预期打印出来的是1的,结果打印出来是-1,把自己搞懵了,想不明白,后面请教网友才知道原因。原因就是两个无符号数相减结果为无符号数,即这里问号表达式为真,所以为-1;
写这篇博文就是提醒大家用宏的时候一定要注意,我还是用库函数abs去了。。