#define Abs(x) (x>=0 x:(-x))
宏定义只是完全替换,不会自动给你加括号的
Abs(a-b)变成
Abs(a-b) (a-b>=0 a-b:(-a-b))
-a-b 就出现问题了,负号的优先级比减号高的
所以在宏定义里,每项运算都要加括号,因为括号的优先级最高,保证表达式的运算顺序不会发生改变
#define Abs(x) ((x)>=0 (x):(-(x)))
#define Abs(x) (x>=0 x:(-x))
宏定义只是完全替换,不会自动给你加括号的
Abs(a-b)变成
Abs(a-b) (a-b>=0 a-b:(-a-b))
-a-b 就出现问题了,负号的优先级比减号高的
所以在宏定义里,每项运算都要加括号,因为括号的优先级最高,保证表达式的运算顺序不会发生改变
#define Abs(x) ((x)>=0 (x):(-(x)))