C中的后增量和前增量

Raj*_*nai 3 c

可能重复:
任何人都可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)

下面有一个代码,我在理解代码的逻辑时遇到了一个非常严重的问题.

#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 ;
}
Run Code Online (Sandbox Code Playgroud)

我在linux发行版下使用名为Mandriva的gcc编译器.在上面提到的我在printf语句中使用了一个变量的pre和post增量.我应该得到的输出是2 2 3 5,但我得到一个不同的输出.请帮我这个代码.

我觉得这段代码很难.

Luc*_*ore 8

这是未定义的行为.在增量之间没有序列点i.

任何结果都是正确的结果(包括您的硬盘驱动器正在格式化).