从void函数返回

Agn*_*kas 60 c function void

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

void function() {
  // blah some code
}
Run Code Online (Sandbox Code Playgroud)

要么

void function() {
  // blah some code
  return;
}
Run Code Online (Sandbox Code Playgroud)

第二种方式的理由:

  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;
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*ris 60

两者都不正确,所以请选择.空return;提供语句允许返回void从端部以外的某处功能.我相信没有其他原因.

  • 正是我现在要使用它的目的;) (2认同)

Tev*_*o D 56

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

void foo(int y)
{
    if(y == 0) return;

    // do stuff with y
}
Run Code Online (Sandbox Code Playgroud)

正如unwind所说:当代码结束时,它结束了.最后不需要明确的回报.

  • **C** 标准是什么意思?在 `void` 返回函数中使用 `return;` 是合法的。 (2认同)

unw*_*ind 24

第一种方式是"更正确",有什么意图可以表达?如果代码结束,则结束.在我看来,这很清楚.

我不明白什么可能令人困惑,需要澄清.如果没有使用循环结构,那么除了函数停止执行之外还可能发生什么?

return在一个void函数结束时,我会对这样一个毫无意义的额外声明感到非常恼火,因为它显然没有任何意义,只是让我觉得原来的程序员说"我对此感到困惑,现在你也可以!" 这不是很好.