【问题标题】:Should I return 0 or 1 for successful function? [duplicate]我应该为成功的功能返回 0 还是 1? [复制]
【发布时间】:2012-03-21 21:40:52
【问题描述】:

可能重复:
Error handling in C code
What return value should you use for a failed function call in C?

我总是使用 0,但它在 ifwhile 等中并不是真正可读的。

我应该返回 1 吗?为什么main函数return 0成功?

【问题讨论】:

  • 链接的问题已关闭。
  • @AdamBernier:作为副本。它有一些高度相关的答案。
  • @Oli:另一个问题作为重复关闭似乎不合适(也许我只是没有看到它)。尽管如此,我还是同意关闭那个和这个:对于这个特定的网站,这些问题似乎过于开放。
  • 这个答案取决于您是否要返回错误代码,而不是 true 或 false。通常当有多个返回错误代码时,0 表示成功,其他值表示错误。我想人们使用 0 表示成功,使用非零表示失败以保持一致。

标签: c boolean


【解决方案1】:

C 标准将其定义为 0 表示成功(学分归于 hvd)。

But

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

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

至于您的函数,返回您希望的内容并使代码更具可读性,只要您在程序中保持这种方式即可。

【讨论】:

  • 0 始终表示成功,但也允许其他退出代码表示成功,具体取决于系统。
  • @AndrewMarshall EXIT_SUCCESS 可能有其他值而不是 0,但即便如此,return 0; 意味着成功。
  • @AndrewMarshall EXIT_FAILURE 不允许为 0,因为 main always 返回 0 表示成功。
  • @hvd:确实,这在 C99 7.20.4.3.5 中有所暗示。
  • @AndrewMarshall 来自 C 标准:“最后,控制权返回到主机环境。如果状态的值为零或 EXIT_SUCCESS,则返回状态成功终止的实现定义形式。” (这是exit函数的部分描述,使用相同的代码。)
【解决方案2】:

main 之所以使用0 表示成功,是因为它用作应用程序对操作系统的退出代码,其中0 通常表示成功,1(或更高)表示失败。 (当然,您应该始终使用预定义的宏 EXIT_SUCCESSEXIT_FAILURE。)

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

if (my_func())
{
  ...
}

【讨论】:

  • "然而,在应用程序内部,使用零表示失败,使用非零表示成功更为自然,因为返回值可以直接用于 if 中:" 我强烈反对这个,只是放一个“!”不仅解决了这个问题,而且总是返回 0 表示成功更加清晰和标准。如果操作系统跟着它,c标准函数跟着它,互联网上的大部分代码都跟着它,这会让读者感到困惑。
猜你喜欢
  • 2019-10-01
  • 2016-01-30
  • 2023-03-02
  • 2011-08-01
  • 2011-01-29
  • 2020-03-20
  • 2010-11-16
  • 2019-12-23
相关资源
最近更新 更多