我很怀疑在使用一些递归函数进行编码时会遇到一些问题。现在,我将给出一个带有嵌套函数调用的简单代码,这样我就可以指出我的确切问题。
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中所指出的,这将取决于编译器,但编译器没有义务记录所发生的事情,也不需要在返回值中保持一致。不同的调用可能返回不同的值。