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);
}
}
我正在从主函数中调用一个函数(递归检查)并获得返回值,但是在其他情况下我如何获得返回值却没有返回?
答案 0 :(得分:3)
欢迎使用未定义的行为。
它在您的(应该是)普通计算机上运行的原因是,在Intel平台上寄存器大小或更小的整数返回是通过写入RAX/EAX/AX
寄存器来完成的,因此这些平台上的大多数编译器都将避免使用如果他们可以避免的话,可以注册进行计算。
因此,当您的函数最终到达有效的return
并写入RAX
寄存器,然后从整个调用链中返回时,最初调用递归函数的函数将读取{ {1}},它将得到一次编写的RAX
。
当然,没有什么可以阻止编译器完全不这样做。它不必使用5
,也不必避免将其用于其他计算。因此,行为不确定。