C 递归中的返回类型
我对以下函数的行为感到困惑。以下是我坚持使用的一些程序: 案例1:C 递归中的返回类型,c,C,我对以下函数的行为感到困惑。以下是我坚持使用的一些程序: 案例1: void f() { printf("wow\t"); } int main() { f(); return 0; } 它给出了预期的输出wow 案例2: void f() { printf("wow\t"); } int main() { f(f()); return 0; } 它给出了错误:void表达式的无效使用,这是显而易见的 案例3: int f() {
void f()
{
printf("wow\t");
}
int main()
{
f();
return 0;
}
它给出了预期的输出wow
案例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;
}
为什么它会给出输出
f()
具有返回类型int
。但在main
中,它不存储在任何变量中。另外,f()
没有接受任何参数,但在案例3中,它将接受由f()
返回的参数
相同的代码在C++中不起作用。
< P>代码<代码> f(f-);从内部函数调用调用f
,然后从外部函数调用调用f
。不存储f
的返回值并没有任何作用。编译器不能仅仅因为忽略函数的返回值而避免调用函数,除非它知道函数没有后果,而这个函数确实有后果
忽略函数的返回值一点也不奇怪。例如,您可能有一个“remove entries”函数,返回它删除的条目数。您可以在不关心返回多少条目的上下文中调用该函数,因此忽略返回值。该函数仍必须运行,否则无法删除条目。见鬼,您忽略了printf
的返回值。但是,如果没有调用它,您会非常惊讶。在C中,您必须明确声明函数不接收任何参数这一事实。例如:
int f(void)
{
printf("wow\t");
}
int main()
{
f(f());
return 0;
}
给出:
error: too many arguments to function ‘f’
在C++中,它是不同的。code>intf(){}
相当于intf(void){}
您自己理解代码吗?递归在哪里?递归是在玩捉迷藏……在C中,你必须明确地告诉编译器函数不应该有任何参数,也就是说函数是“代码>空格f(空隙)< /代码>。