可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
我有这个代码,但我没有得到它的功能。
main()
{
int i=1;
i= ++i + ++i + ++i;
printf("%d",i);
}
我试图编译它,我得到输出10但我不知道如何。 我想到的是在执行加法运算之前,我正在为两个++分配值3和一个++ i得到值4。我无法弄清楚增量运算符在这种情况下是如何工作的。 Plz帮我解决了这个问题。
答案 0 :(得分:1)
行为 undefined ..如果您搜索SO,则会有类似于此的 很多 帖子。
例如What would the evaluation order of x = x++ + ++x; be?或Why are these constructs (using ++) undefined behavior?以及更多。
最后,只是一个意见/评论:我认为没有人会主张编写那种类型的代码,因为它也很难理解(因此你的问题的原因)。
答案 1 :(得分:0)
我很确定你不应该这样做。基本上,不要在同一个表达式中多次修改一个值。否则会调用“未定义的行为”,这是一种奇特的说法,“编译器不保证会发生什么。
(从技术上讲,规则是不要在同一sequence points之间多次修改值