int main()
{
int a=5,s;
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}
输出为 7 和 14
但
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
为什么?
int main()
{
int a=5,s;
s=++a + ++a;
printf("%d",a);
printf("%d",s);
}
输出为 7 和 14
但
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
为什么?
未定义的行为:
s=++a + ++a;
未定义时任何事情都可能发生,因此您的行为是完全有效的。
我怀疑这是编译器优化的产物,在第一个示例a
中是已知的,因此编译器会优化预增量以在添加之前发生。在第二个示例中,该值是未知的,编译器没有优化序列,导致它从左到右完成。这可能是您特定编译器的功能,需要专门查看。
未定义的行为。改变它,否则你可能会被猛禽攻击。
嗨伙计,这个编码在 VI 编译器中正常工作..