为什么我们需要在C函数末尾使用'return 0'?

时间:2016-11-27 20:03:47

标签: c function return

我真的不明白为什么我们需要在函数末尾使用return 0;。我理解为什么我们在main()结束时需要它(表示程序结束?)但我真的不明白为什么我们在常规函数结束时也需要它。

5 个答案:

答案 0 :(得分:3)

如果在您的代码中,您说您的函数返回了一个值,但您实际上并未返回一个值:

int my_function(int x)
{
    // bad practice!
}

...那是错误的不良做法。你说你要返回一个值(在这种情况下,' int')但你没有。

同样,如果您的功能有多条路径:

int my_function(int x)
{
    if (x == 3)
        return 42;  // good

    // bad!
}

并且您再次声明了返回值的意图,但是通过您的函数的某些路径没有,这也是错误错误做法;你违背了对你职能的来电者的承诺。

函数的所有路径都应该以return语句结束:

int my_function(int x)
{
    if (x == 3)
        return 42;  // good

    return 1;  // good
}

如果您不想返回任何值,请声明函数void:

void my_function(int x)
{
    // good
}
上面的

更新:,您可能会注意到我更换了" 错误"与'#34;不良做法"。那是因为“错误”这个词。在C标准中意味着非常特别的东西,忘记return陈述并不符合该定义(相反,它被认为是"未定义的行为,"和你的编译器甚至可能不会抱怨。)但是,作为一个人,你应该认为它是代码中的错误,并且避免忘记函数中所有退出路径上的return语句。

答案 1 :(得分:2)

您不需要在每个函数中返回0。例如:

void my_function(int *p_data)
{
    *p_data = 5;
}

int main(void)
{
    int data = 0;
    my_function(&data);
    printf("Data: %d", data);

    return 0;
}

这将完美无缺。

答案 2 :(得分:1)

如果您将返回类型声明为void

,则不会

答案 3 :(得分:0)

如果函数声明为返回void以外的类型,则必须具有return语句。唯一的例外是main函数,从C99开始,可以省略return语句(省略时,行为与return 0;语句相同在})的结束main之前。

考虑这个错误的test函数:

int test(int a)
{
    if (a == 0)
        return 123;
}

int main()
{
    int x;
    x = test(0); // x equals 123
    x = test(1); // x equals ???
}

如果以{0}作为参数调用test,该函数将返回123,但是如果用0以外的其他值调用它会怎么样?你期望结果是什么? C中的函数没有“默认返回值”,如果返回类型不是void,则返回值必须(一个例外是main函数)。

答案 4 :(得分:0)

调试

对于在Linux中进行调试,通常在正确执行程序时返回0,可以通过在终端中执行echo $?获得返回代码。您可以创建自己的状态代码,例如:

int func(){
   if (1) return 9; //true
   return 0;
int main (){
   return func();
}
$ gcc t.c
$ ./a.out
$ echo $?
9
$

What is echo $? in linux terminal?