这个的意思就是以后遇到有 add(x)
的地方就自动替换为 x + x
,而不是 (x + x)
,因此 int sum = add(1 + 2) * 3
就等价于 int sum = 1 + 2 + 1 + 2 * 3
,因此结果等于 10
。
优先级比较:*
高于 <
高于 ==
,对于2 * 2 == 5 < 2 * 2 == 4
,可以看成 (2 * 2) == (5 < (2 * 2)) == 4
,即 4 == (5 < 4) == 4
,即 4 == 0 == 4
,然后得到 0 == 4
,因此是FALSE,执行 else
语句
1、第一个将add(1+2)换成1+2+1+2后,sum=add(1+2)x3变成:sum=1+2+1+2x3=10;
2、优先级:“*”高于“<”高于高于“==”。
add(1+2)3在宏展开时扩展为 : 1+2+1+23
结果为10
如果希望结果是18应该 这样定义add:#define add(x) ((x)+(x))
宏是非常缺乏可读性的,建议使用函数而不是宏
第二个问题,因为<符号的优先级比==更高,正确的结合顺序是(22)==(5<(22))==4;
第一个==的结果是false,也就是0,那么0==4是错误的。