我怀疑在使用一些递归函数编码时遇到一些问题。现在我在这里给出一个带嵌套函数调用的简单代码,这样我就可以指出我的确切问题了。
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
的值都没有错误...(我预计垃圾或类似的东西)。
如何处理这些事情?
答案 0 :(得分:0)
在你的第二段代码中:
int a()
{
b();
int new=0; //not significant
}
a()
的返回类型为int
。但是,在您的代码中,您没有返回任何内容。这通常会导致undefined behavior。所以,你可能得到任何价值(你说你得到9,而在ideone上使用gcc,我是getting 0)。这是未定义的行为,所以没有人可以准确地说出你会得到什么。
这将取决于编译器,如SO Answer中所指出的,但编译器没有义务记录发生的情况,也不需要在返回值中保持一致。不同的调用可能会返回不同的值。