为什么我们需要在C函数的末尾使用'return 0'?
我不明白为什么我们需要在函数结尾使用return 0;
。我不知道为什么我们需要它在main()
的末尾(为了表示程序结束?),但我真的不明白为什么我们在普通函数结束时还需要它。为什么我们需要在C函数的末尾使用'return 0'?
回答:
如果您将返回类型声明为void
回答:
您不需要在每个函数中都返回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;
}
这将工作得很好。
回答:
如果在你的代码,你说你的函数返回一个值,但你实际上并没有返回一个:
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
声明不符合该定义(相反,它被认为是“未定义的行为”,并且您的编译器甚至可能不会抱怨)。但是,你作为一个人应该认为它是你的代码中的一个错误,并且避免在函数外的所有退出路径上遗忘返回语句。
回答:
如果一个函数声明为返回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
函数),则返回值必须。
以上是 为什么我们需要在C函数的末尾使用'return 0'? 的全部内容, 来源链接: utcz.com/qa/263595.html