如何在嵌套函数调用中处理return语句?

时间:2016-05-16 02:17:29

标签: c function recursion return

我怀疑在使用一些递归函数编码时遇到一些问题。现在我在这里给出一个带嵌套函数调用的简单代码,这样我就可以指出我的确切问题了。

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
}

再次产生有效输出,.i.e,

  

9

虽然我删除了return关键字但我没有得到任何编译错误,输出中i的值都没有错误...(我预计垃圾或类似的东西)。 如何处理这些事情?

1 个答案:

答案 0 :(得分:0)

在你的第二段代码中:

int a()
{
    b();
    int new=0; //not significant
}

a()的返回类型为int。但是,在您的代码中,您没有返回任何内容。这通常会导致undefined behavior。所以,你可能得到任何价值(你说你得到9,而在ideone上使用gcc,我是getting 0)。这是未定义的行为,所以没有人可以准确地说出你会得到什么。

这将取决于编译器,如SO Answer中所指出的,但编译器没有义务记录发生的情况,也不需要在返回值中保持一致。不同的调用可能会返回不同的值。