问题是这样的:
a++ * a + b + c * a * ++b / 4
相当于(a++*a+b) + (c*a*++b/4),标准对于应该先计算(a++*a+b)还是先计算(c*a*++b/4)并没有规定,所以如果说它等于27也是对的。如果仔细分析,可能还有其它结果也正确,所以说,这个表达式究竟应该等于几,是没有意义的。
使用宏替换的代码本来就很难懂,看不懂是正常的。
现在我们手工把宏替换展开:
main()
{
int a = 1, b = 3, c = 5, s1, s2;
s1 = (a = b) > (b - a)?(a = b): (b - a);
//这时s1 = 3, a = 3,其余不变;
s2 = a++ * a + b + c * a * ++b / 4;
//由于这里有很多有副作用的操作符,我也不知道它应该是多少才对了。
}