可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
下面有一个代码,我在理解代码的逻辑时遇到了一个非常严重的问题。
#include <stdio.h>
#include <stdlib.h>
int main(void )
{
int i = 1 ;
printf("\n%d %d %d %d\n",++i,i++,i++,++i) ;
return 0 ;
}
我在名为Mandriva的linux发行版下使用gcc编译器。在上面提到的我在printf语句中使用了一个变量的pre和post增量。 我应该得到的输出是2 2 3 5,但我得到一个不同的输出。 请帮我这个代码。
我觉得这段代码很难。
答案 0 :(得分:7)
这是未定义的行为。 i
的增量之间没有序列点。
任何结果都是正确的结果(包括您的硬盘正在格式化)。
答案 1 :(得分:6)
Undefined behavior and sequence points
Post Increment with respect to Sequence Points
Sequence points and partial order
Sequence points and order of evaluation
Undefined behavior and sequence points reloaded
Where do sequence points come from?
Unsequenced value computations (a.k.a sequence points)
Operator Precedence vs Order of Evaluation
<强> https://stackoverflow.com/questions/tagged/sequence-points 强>