为什么我们需要在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

回到顶部