在 void 函数末尾添加 return 语句有什么意义?

问题描述 投票:0回答:10

我看到签名中带有 void return 的函数/方法在函数末尾有 return 语句。这是什么原因?这是否适用于其他语言?

据我所知,如果我想在函数末尾以外的其他地方退出,我可以使用 return 。

C 示例:

void function(void)
{
   int x = 1 + 2;

   return;    // what do we need this for, if at all?
}
c++ c return void
10个回答
22
投票

这在这里似乎毫无意义。但我的猜测是,这种东西可以用来在不支持在右大括号处放置断点的 IDE 中放置断点,并且通过在此处放置断点,可以在监视窗口等中检查某些值。


16
投票

有人过于字面地理解了“函数必须有一个返回值”的编码准则。


7
投票

对于返回 void 的函数,这并不重要,因为 void 函数的“从末尾脱落”只是按照您的预期返回。

但是有些人喜欢这样做以帮助将来的维护。例如,如果有人后来决定将函数的返回类型更改为 int,如果您忘记更改最终返回语句以使其返回 int 值,您应该会收到编译器错误。如果您根本没有 return 语句,则返回值是未定义的,并且许多较旧的编译器不会警告您这一点(这是真的 - 我已经看到了!)。如今这不是什么大问题,因为大多数现代编译器都会对这些事情发出警告。


6
投票

我总是在函数末尾包含一个 return 语句,即使它们不返回任何内容。我最初的原因是我很明确,函数在哪里结束没有歧义,我总是对“走出终点”的函数感到厌烦。后来,这只是一种习惯,很难打破(如果我想的话)。


4
投票

正如您自己提到的,如果您想在最后一个语句之前退出函数,则只需要 return 语句。在给定的示例中,return 语句没有任何作用。


3
投票

它在 C/C++ 中没有用,只会降低可读性。

需要此功能的一个真实语言示例是汇编程序。但在汇编程序中,return 语句不是语言的一部分。相反,您必须调用一条特殊指令(x86 中的 ret)来导致控制权返回。除非你这样做,否则执行就会继续,接下来会发生什么取决于多种因素,包括运气和月相。


3
投票

这确实毫无意义......至少对于编译器来说,但是风格上,就像 C++ 中的许多东西一样。一个例子:

int main ()
{
   DoSomething ();
   return 0;
}

在 C++ 中,对于符合标准的编译器而言,返回 0 是完全没有意义的。然而有时人们更愿意包含冗余或无意义的陈述只是为了明确。我不太愿意将这些事情归因于程序员的无知。这只是风格,如果您愿意,请随意删除它。


2
投票

我的猜测是因为函数过去常常返回一些值,而程序员可能认为它会再次返回。


2
投票

我不认为你需要它,但你可以拥有它。尝试将其取出并再次运行该程序。看看有什么不同。


© www.soinside.com 2019 - 2024. All rights reserved.