0

可能重复:
谁能解释这些未定义的行为(i = i++ + ++i,i = i++ 等……)

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

为什么?

4

4 回答 4

3

未定义的行为:

s=++a + ++a;

未定义时任何事情都可能发生,因此您的行为是完全有效的。

于 2010-08-17T09:04:46.693 回答
1

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

于 2010-08-17T09:06:29.347 回答
1

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

于 2010-08-17T09:09:41.657 回答
0

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

于 2010-08-17T09:10:06.523 回答