【发布时间】:2016-05-16 02:17:29
【问题描述】:
我很怀疑在使用一些递归函数进行编码时会遇到一些问题。现在在这里我给出一个带有嵌套函数调用的简单代码,以便我可以指出我的确切问题。
int main(void)
{
int i;
i=a();
printf("%d\n",i);
return 0;
}
int a()
{
return b();
}
int b()
{
return 9;
}
好吧,完全没有问题,它的输出为9。但如果我将函数a() 重新定义为:
int a()
{
b();
int new=0; //not significant
}
它再次产生有效的输出,即,
9
在这里,虽然我删除了return 关键字,但我没有收到任何编译错误,输出中i 的值也没有错误......(我预计是垃圾或类似的东西)。
这些事情是如何处理的?
【问题讨论】:
-
这不是一个重复的问题。我的问题与其他返回类型的查询和问题有些不同。
-
@RCoffee:抱歉,选择的副本准确地反映了您修改过的代码——它是一个很好的副本。行为未定义;任何结果都可以,除了耸耸肩说“哦,好吧”之外,没有其他方法可以解释你得到了什么结果。
-
我接受你的回答@CodingBatman 因为你指出的内容非常合乎逻辑。但公平地说,我也尝试过 gcc(我使用 Fedora)和 dev c++。它们都显示了我从函数 b() 返回的输出。
-
@JonathanLeffler 我认为现在是时候耸耸肩说“哦,好吧”。 :) 实际上我正在尝试递归二进制搜索和 Towerofhanoi 算法。在编码中,我在递归调用之前错误地跳过了 return 关键字。但是我没有编译错误并且也得到了正确的输出。
-
@RCoffee,但您确实收到了编译器警告。请检查warning 的编译选项卡。您需要在编译期间使用
-Wall编译器标志。
标签: c function recursion return