【发布时间】:2015-10-06 14:06:44
【问题描述】:
我对 C 中的 return 语句有疑问,它从哪里真正返回:
int base(int a)
{
if(a == 1)
return 0;
}
int inherit()
{
base(1);
// the rest of the code
}
所以在inherit()函数内部,base()被调用,它执行return 0,在这种情况下; inherit() 中的其余代码仍然执行吗? return 语句究竟是如何工作的?
【问题讨论】:
-
inherit呼叫base。基返回一个值,您可以在inherit中使用int ret = base(1);之类的东西来捕获它。但事实并非如此。它调用base(1)而不捕获返回值。所以返回值被忽略了。 -
请注意
base()不会总是返回一个值,用a != 1调用它会调用未定义的行为。 -
优化编译器根本不会产生任何代码 ;-)。
-
@PeterSchneider:这并不完全准确。由于这两个函数都是外部可见的,因此编译器有义务生成代码,以便可以从其他源文件调用这些函数。但是,它可能会使
inherit()变成一个空函数,因为它可以看到调用base()没有任何用处(并且inherit()中没有显示任何其他内容,尽管注释表明那里还有其他代码。 -
@JonathanLeffler 没错,“根本”说得太多了。