本想对一个数进行取绝对值处理,于是写了这个宏定义:
#define ABS(X) (X >= 0) ? X : -X
后来当我写了一个这样的判断语句时:
if (i == ABS(num))
发现只要 num 的值不为 0 ,if 后的的语句永远是真命题
于是写了两行代码把判断的结果作为整型输出试试:
int num = 8;
printf("%d", 5 == ABS(num));
发现结果并非 0 或 1 ,而是一个 -8
把句子展开之后才恍然大悟:
原来是?前的逻辑运算优先级要比 ? : 高
所以将宏定义改成下面这样就可以了:
#define ABS(X) (X >= 0 ? X : -X)