use*_*788 1 c recursion return void
有人知道之间的内部差异:
void RecFoo1(int bar){
if (bar == 0)
return ;
RecFoo1(bar - 1);
}
Run Code Online (Sandbox Code Playgroud)
和
void RecFoo2(int bar){
if (bar == 0)
return ;
return RecFoo2(bar - 1);
}
Run Code Online (Sandbox Code Playgroud)
我确信放置return关键字总是更好.如果递归函数不是void函数,则会收到警告-Wreturn-type.但这两段代码是否以相同的方式编译/执行?机器的内部差异是什么?
我的函数示例是愚蠢的,但它构成了一种最小的例子......
C标准非常清楚,你的RecFoo2示例不是有效的C程序:
6.3.2.2无效
void表达式(具有void类型的表达式)的(不存在)值不得以任何方式使用,...
和
6.8.6.4退货声明
约束
带有表达式的return语句不应出现在返回类型为void的函数中.