从函数返回是更正确的方法:
void function() {
// blah some code
}
OR
void function() {
// blah some code
return;
}
第二种方式的理由:
假设你有这样的场景 - 你有很多函数,你必须在这些函数的末尾注入一些代码。但由于某些原因,您不希望/或无法修改如此大量的功能。你能做些什么? 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;
}
答案 0 :(得分:54)
在void函数中返回的唯一原因是由于某些条件语句而提前退出:
void foo(int y)
{
if(y == 0) return;
// do stuff with y
}
正如unwind所说:当代码结束时,它结束了。最后不需要明确的回报。
答案 1 :(得分:53)
两者都不正确,所以请选择。提供了空return;
语句,以允许{end>之外的某个地方的void
函数中的返回。我相信没有其他原因。
答案 2 :(得分:24)
第一种方式是“更正确”,有什么意图可以表达?如果代码结束,则结束。在我看来,这很清楚。
我不明白什么可能令人困惑,需要澄清。如果没有使用循环结构,那么除了函数停止执行之外还可能发生什么?
在return
函数结束时,我会被这种毫无意义的额外void
语句严重烦恼,因为它显然没有任何意义,只是让我觉得原来的程序员说“我很困惑关于这一点,现在你也可以!“这不是很好。
答案 3 :(得分:1)
一个老问题,但无论如何我都会回答。问题的答案是,裸露的回报是多余的,应该被排除在外。
此外,由于以下原因,建议值为false:
if (ret<0) return;
将C保留字重新定义为宏是一个坏主意,但这个特殊的建议是不可支持的,无论是作为参数还是作为代码。