-4

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

我有这段代码,但我不知道它是如何运作的。

main()
{
 int i=1;
 i= ++i + ++i + ++i;
 printf("%d",i);
}

我试图编译它并得到输出 10 但我不知道如何。我发现在执行加法运算之前,两个 ++i 被赋值为 3,一个 ++i 被赋值为 4。我无法弄清楚在这种情况下增量运算符是如何工作的。请帮我解决这个问题。

4

2 回答 2

1

行为未定义..如果您在 SO 上搜索,会有很多类似的帖子。

例如x = x++ + ++x 的评估顺序是什么?是?或者为什么这些构造(使用++)是未定义的行为?和更多。

最后,只是一个意见/评论:我认为没有人会提倡编写这种类型的代码,因为它也很难理解(因此是您提出问题的原因)。

于 2012-08-16T15:28:49.860 回答
0

我很确定你不应该那样做。基本上,不要在同一个表达式中多次修改一个值。否则会调用“未定义的行为”,这是一种奇特的说法,即“编译器不保证会发生什么。

(从技术上讲,规则是不要在相同的序列点之间多次修改一个值)

于 2012-08-16T15:30:16.950 回答