【发布时间】:2020-08-13 16:53:07
【问题描述】:
1. #include<stdio.h>
int recursion_check(int i);
main(){
printf("%d",recursion_check(6));
}
int recursion_check(int i){
if(i==0)
return 5;
else{
recursion_check(i-1);
}
}
我正在从主函数调用一个函数(递归检查)并获取返回值,但在其他情况下没有返回,我如何获取返回值?
【问题讨论】:
-
这只是侥幸。打开更多编译器警告,例如
-Wall或等效警告,以了解潜在问题。 -
@Carcigenicate 作为记录,C 根本不需要。您可以定义一个具有
int类型但没有return的函数,它将是一个有效的C 程序。另一方面,C++ 要求函数内的所有代码路径都有效返回(main除外,为了与 C 兼容)。 -
@Blindy 它可能是一个有效的 C 程序,但函数的结果将是不确定的,对吧?通过“必须*”,我的意思是保证预期的行为。
-
也许,也许不是。我的意思是看OP中的代码。只要您在常规平台(x86、x86_64)上使用“普通”编译器(gcc、msvc、icc)编译它,它总是会返回预期值,并且不会写入
rax相同的值每次通话。它应该生成正确的代码,实际优化编译器将为更便携的代码输出,而不需要优化编译器。 -
(当然忽略尾递归优化或死代码消除,完全优化的编译器应该用负载
5指令替换整个调用)
标签: c function recursion return