从void函数返回
从函数返回哪个更正确的方法:
void function() { // blah some code }
要么
void function() { // blah some code return; }
第二种方式的理由:
- 它更清楚地expression了开发者的意图。
- 它有助于在预编译时检测函数结束:
假设你有这样的场景 – 你有一堆function,你必须在这些function的末尾注入一些代码。 但由于某些原因,您不希望或不能修改如此巨大的function。 你能做些什么呢? Return
和macro
进入,例如:
#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"); }();