我真的不明白为什么我们需要在函数末尾使用return 0;
。我理解为什么我们在main()
结束时需要它(表示程序结束?)但我真的不明白为什么我们在常规函数结束时也需要它。
答案 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
$