C编译器GCC和Turbo的奇怪行为

Kus*_*hal 0 c gcc turbo-c

我经历过其他类似的问题,但试图了解我所面临的情况.

所以,这是我的两行C代码.

int i=0;
printf("%d %d %d %d %d",i++,i--,++i,--i,i);
Run Code Online (Sandbox Code Playgroud)

以下是我从GCC和Turbo C编译器获得的输出.

GCC

输出:

-1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

Turbo C.

输出:

-1 0 0 -1 0
Run Code Online (Sandbox Code Playgroud)

我尝试了单独使用预增量运算符的各种实验,并且两个编译器的工作方式相似,但是当我使用上面的printf语句时,输出会有所不同.

我知道Turbo C是一个古老的编译器,现在已经过时和非标准,但仍无法弄清楚上面的代码有什么问题.

Mat*_*Mat 8

它是未定义的行为,您在i没有序列点的情况下多次读取和修改.(,函数参数列表中的不是序列点,也没有定义函数参数的求值顺序.)

编译器可以在这种情况下输出它想要的任何内容.不要那样做.

通过搜索此站点查找其他类似问题[C] undefined behavior.这很有启发性.

  • 一些事情,比如完整表达的结束.有关简单说明,请参见[序列点](http://en.wikipedia.org/wiki/Sequence_point). (2认同)