提问人:Thang Tons 提问时间:10/31/2023 最后编辑:AmitThang Tons 更新时间:11/3/2023 访问量:111
C printf() 函数的计算顺序?[复制]
C printf() function order of evaluations? [duplicate]
问:
输出是什么? 请给出有效的解释。
#include<stdio.h>
int main()
{
printf("%d %d", printf("Hello World"), printf("New World"));
}
它给予:
New WorldHello World11 9
我不知道为什么它首先打印了“新世界”而不是“Hello World”。请解释输出。
答:
0赞
Serge Ballesta
10/31/2023
#1
你首先应该记住,C语言几乎没有什么魔力:它最初被设计成盲目服从它的程序员,现在仍然主要按照它的要求去做。
这里发生的事情是:你用 3 个参数调用函数:一个字符串 () 和 2 个恰好是函数调用的表达式。printf
"%d %d"
因此,编译器首先计算函数参数(以未指定的顺序)。每个函数调用都会执行自己的输出,并返回(与任何调用一样)字符数。您首先看到的原因以及由您的特定 C 实现决定的顺序。printf
printf
Hello world
New world
然后使用参数调用外部 printf,并且(内部 printf 调用的返回值...)并通常显示 。"%d %d"
9
11
9 11
没有魔法......
评论
0赞
Thang Tons
10/31/2023
我仍然不明白打印时输出顺序更改的原因。您能否进一步解释为什么给定的参数顺序没有按应有的方式执行?
3赞
Weijun Zhou
10/31/2023
没有“应该”的说法。参数按未指定的顺序计算。另请参阅@Joel的链接。
2赞
Eric Postpischil
10/31/2023
@ThangTons:没有“应该”评估参数的顺序。C 标准没有规定它们必须按任何特定顺序进行评估。没有任何东西说它们是从左到右评估的。参数甚至根本不需要按顺序计算;编译器可以计算一个参数的一部分,然后是另一个参数的一部分,然后是第一个参数的一部分,依此类推(除了参数本身的排序约束)。例如,可以按 、 、 、 的顺序进行计算。printf("%d %d", f()+g(), h()+i())
f
i
h
g
评论