以下代码给出 44 作为输出,这对我来说没有任何意义。答案不应该是41吗?
a++ + ++a + ++a*4
5 + (++a) + (++a)*4
5 + (++a) + 7*4
5 + 8 + 28
41
#include <stdio.h>
int main() {
int a = 5;
int b = (a++ + ++a + ++a*4);
printf("%d", b);
return 0;
}
根据 6.5 第 2 段,该程序具有未定义的行为:
如果标量对象上的副作用相对于标量对象上的不同副作用是无序的 相同标量对象或使用相同标量对象的值进行值计算,行为 未定义。如果表达式的子表达式有多个允许的排序,则 如果在任何顺序中发生此类未排序的副作用,则行为未定义