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



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

int main(void) 
{
    int i;
    i=a();
    printf("%dn",i);
    return 0;
}
int a()
{
  return b();
}
int b()
{
    return 9;
}

好吧,一点问题都没有,它的输出为9。但如果我将函数a()重新定义为:

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

它再次产生有效的输出,即

9

在这里,虽然我删除了return关键字,但我没有得到任何编译错误,输出中的i值也没有错。。。(我本以为是垃圾之类的)。这些事情是如何处理的?

在您的第二段代码中:

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

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

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

最新更新