成功的函数应该返回0还是1?

65

2
该相关问题已被关闭。 - mechanical_meat
@AdamBernier:作为一个副本。 它有一些非常相关的答案。 - Oliver Charlesworth
@Oli:另一个问题被关闭为重复似乎不太合适(也许我只是没看到)。尽管如此,我同意关闭那个和这个问题:这些问题似乎对于这个特定的网站来说过于开放。 - mechanical_meat
这个答案取决于你是否想返回错误代码,而不是真或假。通常情况下,当有多个返回错误代码时,0表示成功,其他值表示错误。我想人们使用0表示成功,非零表示失败以保持一致性。 - Marlon
2个回答

60

根据C的标准,0表示成功 (感谢hvd)。

但是

为了更好的可移植性,可以使用宏EXIT_SUCCESSEXIT_FAILURE分别表示成功和失败的常规状态值。它们在文件stdlib.h中声明。

(我说的是从main,exit或类似调用返回给操作系统的值)

至于函数,只要保持代码易读性并一致,返回你希望的内容即可。


@hvd 这不是真的。在 C 标准中没有定义 EXIT_SUCCESSEXIT_FAILURE 的值。 - Andrew Marshall
2
@AndrewMarshall EXIT_SUCCESS 可能不是0,但即使如此,return 0; 同样 表示成功。 - user743382
2
@AndrewMarshall EXIT_FAILURE 不允许为0,因为从主函数返回0始终意味着成功。 - user743382
2
@hvd:确实,这在C99的7.20.4.3.5中是暗示的。 - Oliver Charlesworth
6
根据C标准的描述:"最终,控制权将返回给主机环境。如果状态值为零或EXIT_SUCCESS,则返回一种由实现定义的成功终止状态。" (这是使用相同代码的'exit'函数的描述的一部分。) - user743382
显示剩余3条评论

24

main 函数为什么使用 0 表示成功呢?因为它作为应用程序向操作系统的退出代码,其中 0 通常表示成功而 1(或更高)表示失败。(当然,您应该始终使用预定义的宏 EXIT_SUCCESSEXIT_FAILURE。)

然而,在应用程序内部,使用零表示失败而非零表示成功更为自然,因为返回值可以直接用于 if 中,如下所示:

if (my_func())
{
  ...
}

11
在应用程序中,使用0表示失败,非零表示成功更为自然,因为返回值可以直接在if语句中使用,例如:“Inside an application, however, it's more natural to use zero for failure and non-zero for success, as the return value can directly be used in an if as in:"但是我强烈反对这种做法,只需加上一个“!”就能解决问题,而且始终返回0表示成功更加清晰和规范。如果操作系统遵循此标准,C标准函数遵循此标准,互联网上的大多数代码也遵循此标准,否则会让读者感到困惑。 - Santropedro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接