在C中输入Puzzler

时间:2010-08-17 09:00:22

标签: c scanf unary-operator operator-precedence

  

可能重复:
  Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

int main()
{
int a=5,s;
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}

输出为7和14

BUT

int main()
{
int a, s;
printf("Enter value of a");
scanf ("%d",&a);
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}

输入用户给出的是5 输出是7和13

为什么?

4 个答案:

答案 0 :(得分:3)

未定义的行为:

s=++a + ++a;

任何都可以在未定义时发生,因此您的行为完全有效。

答案 1 :(得分:1)

我怀疑这是编译器优化的工件,在第一个例子中a是已知的,因此编译器会优化在添加之前发生的预增量。在第二个示例中,值是未知的,编译器不会优化序列,导致它从左到右完成。这可能是您的特定编译器的功能,需要专门查看。

答案 2 :(得分:1)

未定义的行为。改变它,否则你可能会被猛禽袭击。

答案 3 :(得分:0)

嗨,这个编码在VI编译器中正常工作..