【问题标题】:EXIT_FAILURE vs exit(1)?EXIT_FAILURE 与退出(1)?
【发布时间】:2012-11-19 23:32:44
【问题描述】:

有什么区别?哪个是首选,或者我应该什么时候分别使用它们?

【问题讨论】:

标签: c exit


【解决方案1】:

不仅VMS有自己的规则,AmigaDOS也定义了低于5的返回码为ok。

【讨论】:

    【解决方案2】:

    exit(1)(通常)表示终止不成功。但是,它的使用是不可移植的。例如,在OpenVMS 上,exit(1) 实际上表示成功。

    只有EXIT_FAILURE 是返回不成功终止的标准值,但1 在许多实现中用于相同的值。


    总结一下:
    如果你想编写完美可移植的代码使用,

    EXIT_FAILURE 用于失败案例。同时,
    您可以使用exit(0)EXIT_SUCCESS 作为成功案例。

    请注意,EXIT_SUCCESS0 都是相同的。


    参考:

    C99 标准:7.20.4.3 exit 函数
    第 5 段

    最后,控制权返回到宿主环境。如果 status 的值为zeroEXIT_SUCCESS,状态成功终止的实现定义形式是 回来。如果status的值为EXIT_FAILURE,则为实现定义的形式 状态不成功终止的返回。否则返回的状态为 实现定义。

    【讨论】:

    • 答案指出:“EXIT_FAILURE 用于非失败案例。”你的意思是:“EXIT_FAILURE 失败案例?”
    • @VilhelmGray:是的。很好发现。
    【解决方案3】:

    对于某些程序应该返回什么样的状态值有一些约定。最常见的约定是 0 表示成功,1 表示失败。执行比较的程序使用不同的约定:它们使用状态 1 表示不匹配,使用状态 2 表示无法比较。如果现有约定对您的程序有意义,则您的程序应遵循现有约定。

    一些非 POSIX 系统对退出状态使用不同的约定 价值观。 For greater portability,你可以使用宏EXIT_SUCCESSEXIT_FAILURE 为成功的常规状态值, 分别失败。它们在文件 stdlib.h 中声明。

    【讨论】:

      【解决方案4】:

      对于真正可移植的代码,EXIT_FAILURE 是首选。 C 标准仅定义了三个值的含义:EXIT_FAILURE0EXIT_SUCCESS0EXIT_SUCCESS 本质上是同义词)。

      从实际的角度来看,大多数典型系统也接受其他值。如果没记错的话,Linux 将允许您返回任何 8 位值,而 Windows 将返回 16 位值。除非您真的关心移植到 IBM 大型机、VMS 等,否则您可能并不关心大多数不支持至少 8 位返回值的系统。

      【讨论】:

        【解决方案5】:

        使用EXIT_FAILURE。它是一个在整个操作系统中使用的常量。它的值可能不是 1,而且它在代码中更具描述性。

        【讨论】:

        • 它在多个操作系统中是一个常量吗?
        • @Aerovistae: EXIT_FAILURE 由 C 标准指定,自 1989 年以来一直如此。它将在任何相当现代的 C 编译器上可用。它的值通常是1,但它始终是表示当前操作系统中程序执行失败的正确值。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-08
        • 2022-08-10
        • 2019-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多