最近撸代码过程中要用到一个数的绝对值,为了图方便直接定义了一个宏来求绝对值,定义如下:
#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去了。。