从void函数返回

时间:2012-01-25 13:11:05

标签: c function void

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

void function() {
  // blah some code
}

OR

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

第二种方式的理由:

  1. 它更清楚地表达了开发者的意图。
  2. 它有助于在预编译时检测函数结束:
  3. 假设你有这样的场景 - 你有很多函数,你必须在这些函数的末尾注入一些代码。但由于某些原因,您不希望/或无法修改如此大量的功能。你能做些什么? 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;
    }
    

4 个答案:

答案 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保留字重新定义为宏是一个坏主意,但这个特殊的建议是不可支持的,无论是作为参数还是作为代码。