printf() 如何使用前缀和后缀一元运算符执行其参数?

How does printf() execute its arguments with prefix and postfix unary operators?

提问人:Viraj 提问时间:10/24/2023 更新时间:10/24/2023 访问量:35

问:

我在 C 中为 printf 编写了一个简单的代码,带有一元前缀运算符,如下所示:

#include <stdio.h>
int main() {
    int i=5;
    printf("%d %d %d",++i,i,i+1);
    return 0;
}

这是输出:

6 6 6

现在,我所理解的是,C 编译器通常从右到左执行 printf() 参数,因此在这种情况下,i+1 应该是 6(因为 i 是 5),i 应该是 5,++i 首先变成 6,然后打印。因此,在我看来,预期的输出应该是:6 5 6

如果它从左到右执行,我们应该得到 .6 6 7

printf 一元运 后缀运算符前缀运算符

评论

1赞 slothrop 10/24/2023
这回答了你的问题吗?printf() 中的语句是从右到左执行的吗?
0赞 Viraj 10/26/2023
所以基本上没有办法预测编译器将如何执行参数?我在做而不是时得到相同的结果。因此,即使我在同一个编译器上给出 3 个整数数据类型的参数,执行顺序也不同。printf("%d %d %d",++i,i,i);printf("%d %d %d",++i,i,i+1);
0赞 slothrop 10/26/2023
“所以基本上没有办法预测编译器将如何执行参数?”没错,这是未定义的行为,即语言规范不需要编译器以任何特定顺序进行评估。
0赞 Viraj 10/27/2023
知道了,谢谢。

答: 暂无答案