为什么表达式 (a++ + ++a + ++a*4) 给出的答案是 44?

问题描述 投票:0回答:1

以下代码给出 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;
}
c increment
1个回答
0
投票

根据 6.5 第 2 段,该程序具有未定义的行为:

如果标量对象上的副作用相对于标量对象上的不同副作用是无序的 相同标量对象或使用相同标量对象的值进行值计算,行为 未定义。如果表达式的子表达式有多个允许的排序,则 如果在任何顺序中发生此类未排序的副作用,则行为未定义

© www.soinside.com 2019 - 2024. All rights reserved.