我对以下函数的行为感到困惑。以下是我坚持使用的一些程序:
案例1:
void f()
{
printf("wow\t");
}
int main()
{
f();
return 0;
}
它给出了预期的输出哇
。
案例2:
void f()
{
printf("wow\t");
}
int main()
{
f(f());
return 0;
}
它给出了错误:无效使用void表达式
,这是显而易见的。
案例3:
int f()
{
printf("wow\t");
}
int main()
{
f(f());
return 0;
}
为什么它给出输出wow wow
?
f()
的返回类型为 int
。但在 main
中它没有存储在任何变量中。此外,f()
没有接受任何参数,但在情况 3 中,它将接受 f()
返回的参数。
相同的代码在 C++ 中不起作用。
最佳答案
代码f(f());
从内部函数调用中调用f
,然后从外部函数调用中调用f
。您不存储 f
的返回值不会执行任何操作。编译器无法仅仅因为忽略函数的返回值而避免调用函数,除非它知道该函数不会产生任何后果,而该函数确实会产生后果。
忽略函数的返回值并不罕见。例如,您可能有一个“删除条目”函数,该函数返回它删除的条目数。您可能会在不关心它返回多少条目的上下文中调用该函数,因此您会忽略返回值。该函数仍然必须运行,否则该条目将不会被删除。哎呀,您忽略了 printf 的返回值。如果它没有被调用,你会感到非常惊讶。
关于c - 递归中的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12037195/