与计划的输出混淆

时间:2012-11-17 18:45:43

标签: c

  

可能重复:
  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。

1 个答案:

答案 0 :(得分:2)

大多数编译器会在执行添加之前将j增加两次,并将值归于y,这就是为什么结果为14的原因。

C标准没有指定该表达式的评估顺序,因此在另一个编译器上,结果可能确实是13。

换句话说,这是未定义的行为,除了混淆竞赛和谜题之外,不应该使用它。