2016-11-27 109 views
-4

我不明白为什么我们需要在函数结尾使用return 0;。我不知道为什么我们需要它在main()的末尾(为了表示程序结束?),但我真的不明白为什么我们在普通函数结束时还需要它。为什么我们需要在C函数的末尾使用'return 0'?

+1

它取决于 - 它只是表示没有错误的惯例 –

+0

如果你想让调用进程知道它执行的程序的状态,你需要在'main'的末尾返回一个值。例如,Windows批处理文件可以根据程序返回的值使用'errorlevel'来采取行动。 –

+1

'main'是*不需要'return'语句(从C99开始)的唯一函数。 – dreamlax

回答

1

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

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; 
} 

这将工作得很好。

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 
} 

UPDATE :以上,您可能会注意到我将“错误”替换为“不良做法”。这是因为“错误”这个词在C标准中非常特别,并且忘记return声明不符合该定义(相反,它被认为是“未定义的行为”,并且您的编译器甚至可能不会抱怨)。但是,你作为一个人应该认为它是你的代码中的一个错误,并且避免在函数外的所有退出路径上遗忘返回语句。

+0

C中省略return语句并不是错误。如果你既省略了return语句,又试图在调用代码中使用返回值,那只是一个错误。 (而这种错误的本质是未定义的行为,不需要诊断 - 编译器不必警告这一点,尽管一些人会这样做)。 –

+1

虽然你的评论是正确的,但看起来OP是一个新手,我觉得这样的细节对于他/她来说太早了。我的回答是前瞻性的,朝着良好的编程习惯。如果你喜欢,我可以把我的话'错误'改为'坏' –

0

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

考虑这个错误test功能:如果你调用test以0作为参数

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

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

,功能会给你回123,但是如果你比0以外的称呼呢?你期望的结果是什么?对于C中的函数,没有“默认返回值”,如果返回类型不是void(有一个例外是main函数),则返回值必须

相关问题