递归C void函数和return关键字

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.但这两段代码是否以相同的方式编译/执行?机器的内部差异是什么?

我的函数示例是愚蠢的,但它构成了一种最小的例子......

hlo*_*dal 6

C标准非常清楚,你的RecFoo2示例不是有效的C程序:

6.3.2.2无效

void表达式(具有void类型的表达式)的(不存在)值不得以任何方式使用,...

6.8.6.4退货声明

约束

带有表达式的return语句不应出现在返回类型为void的函数中.