可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
Undefined Behavior and Sequence Points
#include<stdio.h>
int main(){
int i=5,j=5,y,x;
int m=++i;
int n=++i;
x=m+n;
y=++j + ++j ;
printf("%d %d ",x,y);
return 0;
}
输出:13 14 任何人都可以解释为什么'y'值是14而不是13。
答案 0 :(得分:2)
大多数编译器会在执行添加之前将j增加两次,并将值归于y,这就是为什么结果为14的原因。
C标准没有指定该表达式的评估顺序,因此在另一个编译器上,结果可能确实是13。
换句话说,这是未定义的行为,除了混淆竞赛和谜题之外,不应该使用它。