Udi*_*pta 3 c standards gcc turbo-c
这是我的简单代码......
#include<stdio.h>
int main()
{
int i=5;
printf("%d %d %d %d %d ",i++,i--,++i,--i,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc上,它输出为"4 5 5 5 5"
但在TC上,输出为"4 5 5 4 5"
我知道在printf语句中,如果是单个表达式,则评估将从左到右,但在正常语句中,它将从左到右.
但是如果printf包含多个表达式,那么评估将在堆栈上,元素将从左到右推入堆栈,但从右到左弹出,这证明TC输出是正确的
请纠正我在哪里错了???
C没有指定应该在哪里评估哪个顺序函数参数,因此它是未定义的,编译器可以选择它,包括任意和随机.Bjarne Stroustrup在"The C++ Programming Language"第3版第6.2.2节中明确说明了这一点
他还给出了一个理由:
Better code can be generated in the absence of restrictions on expression evaluation order
Run Code Online (Sandbox Code Playgroud)