从void函数返回

从函数返回哪个更正确的方法:

void function() { // blah some code } 

要么

 void function() { // blah some code return; } 

第二种方式的理由:

  1. 它更清楚地expression了开发者的意图。
  2. 它有助于在预编译时检测函数结束:

假设你有这样的场景 – 你有一堆function,你必须在这些function的末尾注入一些代码。 但由于某些原因,您不希望或不能修改如此巨大的function。 你能做些什么呢? Returnmacro进入,例如:

 #include<stdio.h> #define MAX_LINES 1000 #define XCAT(a,b) a##b #define CAT(a,b) XCAT(a,b) #define return returns[__LINE__] = 1;\ if (returns[__LINE__])\ {printf("End of function on %d line.\n",__LINE__);}\ int CAT(tmp,__LINE__); \ if ((CAT(tmp,__LINE__)=returns[__LINE__], returns[__LINE__] = 0, CAT(tmp,__LINE__)))\ return static int returns[MAX_LINES]; void function1(void) { return; } void function2(void) { return; } int main() { function1(); function2(); return 0; } 

也不是更正确的,所以请select。 空的return; 语句提供允许从一个void函数返回的地方,而不是结束。 没有别的理由我相信。

在void函数中返回的唯一原因是由于某些条件语句提前退出。

 void foo(int y) { if(y == 0) return; // do stuff with y } 

正如展开说的那样,当代码结束时,结束。 最后不需要明确的回报。

第一种方法是“更正确”,可以expression什么意图? 如果代码结束,它结束。 在我看来,这很清楚。

我不明白什么可能会混淆,需要澄清。 如果没有使用循环构造,那么除了函数停止执行之外可能发生什么?

在一个void函数结束时,我会被这样一个毫无意义的额外return语句严重地烦恼,因为它显然没有任何目的,只是让我觉得原来的程序员说:“我对此感到困惑,现在你也可以! 这不是很好。

一个古老的问题,但我会回答。 对实际问题的回答是,裸退是多余的,应该被排除在外。

而且,由于以下原因,build议的值是错误的:

 if (ret<0) return; 

将C保留字重新定义为macros是一个不好的想法,但是这个特殊的build议是无法支持的,无论是作为参数还是作为代码。

void是一个一元运算符。 它可以用在自我调用的函数中。 正如+, – ,〜,! 运营商

 void function(){ console.log("test"); }(); !function(){ console.log("test"); }();