【发布时间】:2020-07-28 00:20:08
【问题描述】:
今天我正在试验随机的 C 代码,我发现了一些让我感到困惑的东西。在以下程序中:
#include <stdio.h>
int f(int x)
{
if(x==2)
return 2;
else
{
printf("+");
f(x-1);
}
}
int main()
{
int n,i;
n = f(6);
printf("%d\n",n);
}
输出很符合预期++++2,没有混淆'+'的数量,因为递归调用的数量是4。但是我的问题是关于返回值2。在函数中,返回了一个值当if(x==2) 条件成立时。现在,当使用 2 以外的数字调用函数时,它将进入 else 块。该块中没有明确的 return 语句。但它仍然在返回一个值。如何允许?即使没有明确要求程序返回一个数字,它又是如何决定返回的呢?程序是否只是简单地返回它从最近的函数调用中获得的数字?当一个函数被调用时,调用者维护一个栈。返回值存储在寄存器中。该函数是否应该返回存储在该寄存器中的值?有人请解释一下。
【问题讨论】:
-
编译器应该警告你没有提供返回值。为您的编译器尝试
-Wall或类似名称。在这种情况下返回的值是未定义的,可能看起来是“随机的”。