可能重复:
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
为什么?
答案 0 :(得分:3)
未定义的行为:
s=++a + ++a;
任何都可以在未定义时发生,因此您的行为完全有效。
答案 1 :(得分:1)
我怀疑这是编译器优化的工件,在第一个例子中a
是已知的,因此编译器会优化在添加之前发生的预增量。在第二个示例中,值是未知的,编译器不会优化序列,导致它从左到右完成。这可能是您的特定编译器的功能,需要专门查看。
答案 2 :(得分:1)
未定义的行为。改变它,否则你可能会被猛禽袭击。
答案 3 :(得分:0)
嗨,这个编码在VI编译器中正常工作..