这是我的简单代码...
#include<stdio.h>
int main()
{
int i=5;
printf("%d %d %d %d %d ",i++,i--,++i,--i,i);
return 0;
}
在 gcc 上,输出为 '4 5 5 5 5'
但在 TC 上,它给出的输出为“4 5 5 4 5”
据我所知,在 printf 语句中,如果它是单个表达式,则计算将从左到右,但在正常语句中,它将从左到右。
但如果 printf 包含多个表达式,则计算将在堆栈上,元素将从左到右压入堆栈,但从右到左弹出,这证明了 TC 输出的合理性
请纠正我哪里错了???
C 没有指定函数参数的计算顺序,因此它是未定义的,编译器可以按照他们选择的方式执行此操作,包括任意和随机。 Bjarne Stroustrup 在《C++ 编程语言》第 3 版第 6.2.2 节中明确指出了这一点
他还给出了理由:
Better code can be generated in the absence of restrictions on expression evaluation order
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)