【发布时间】:2023-03-25 02:56:01
【问题描述】:
最近我在理解 printf() 函数的行为时遇到了问题。
这就是我的工作
#include<stdio.h>
int main(){
int a=5;
printf("%d %d %d",a++,a++,++a);
return 0;
}
当我在 gcc (linux) 上运行此代码 sn-p 时,我得到的输出为 7 6 8。
但是在 turbo (windows) 上运行它时,我得到了7 6 6 的输出。
我的理解是在 turbo 中,参数是按从右到左的顺序传递的。
谁能解释一下它是如何使用 gcc 在 linux 中工作的。
【问题讨论】:
-
我怀疑您面临未定义的行为
-
顺序依赖于实现,你不应该依赖它。
-
另见this
-
这是未定义的行为 (UB),因为您不止一次地修改了
a的值,而没有中间的序列点。此外,函数参数的评估顺序是未指定的,因此即使不是 UB,您也不会得到有意义的结果。