从 void 函数返回

返回函数的更正确方式是:

void function() {
// blah some code
}

或者

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

第二条道路的理由:

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

假设你有这样的场景-你有一堆的函数,你必须在这些函数的末尾注入一些代码。但是由于某些原因,您不希望/或不能修改如此大量的函数。你能做什么?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;
}
173985 次浏览

第一种方式是“更正确”,有什么意图可以表达?如果代码结束了,它就结束了。在我看来,这很明显。

我不明白什么可能是混乱的,需要澄清。如果没有使用循环结构,那么除了函数停止执行之外还会发生什么情况呢?

void函数的末尾附加这样一个毫无意义的 return语句会让我非常恼火,因为它显然没有任何用处,只是让我觉得最初的程序员说: “我对此感到困惑,现在你也可以感到困惑了!”这可不太好。

Void 函数返回值的唯一原因是由于某些 If判断语句而提前退出:

void foo(int y)
{
if(y == 0) return;
else
// more code here
}

正如 unwind 所说: 当代码结束时,它就结束了。不需要在结束时显式返回。

两者都不对,所以你自己选吧。提供空 return;语句是为了允许 void函数中的 返回来自结尾以外的其他位置。没有其他原因。

老问题了,不过我还是会回答的。对于实际问题的答案是,单纯的回报是多余的,应该被忽略。

此外,由于以下原因,所建议的数值是错误的:

if (ret<0) return;

将 C 保留字重新定义为宏从表面上看是一个糟糕的主意,但是这个特殊的建议无论是作为参数还是作为代码都是不可支持的。