为什么printf()即使没有被整数变量捕获也能工作?

时间:2018-04-24 06:34:50

标签: c printf return-type

我想知道C或C ++编程语言中的printf()是否在屏幕上返回打印的字符数,那么

printf("%d", 10); 

工作?为什么它没有显示任何错误?

应该使用整数变量来捕获返回的值,如下所示:

int var = printf("%d", 10); 

printf()如何在内部解决此问题?

1 个答案:

答案 0 :(得分:8)

printf()在这里没什么特别的。 C并不要求你对你评估的表达式的结果做任何事情。

2 + 3;

是完全有效的陈述。 (它可能会从编译器生成警告,因为它实际上没有做任何事情,与printf()等函数调用不同。)

让我们看一下你的第二个版本的微小变化:

int var;
var = printf("%d", 10);

在这里你可能会认为我们正在追赶"来自printf的{​​{1}}的返回值,因此没有留下任何结果值。但var只是另一个运算符(如=+),它会返回一个值!

&&

int x, y, z; x = (y = (z = 42)); // perfectly valid code x = y = z = 42; // same thing; = is right associative 返回分配的值,此代码将所有三个变量设置为=

所以,如果C要求你去捕捉"返回值,你不能使用赋值语句,因为它们也返回一个值。