什么时候应该返回EXIT_SUCCESS和EXIT_FAILURE?成功终止意味着什么?

时间:2014-04-05 10:15:36

标签: c++

在C ++应用程序的主函数中,何时应该返回EXIT_SUCCESS和EXIT_FAILURE?成功终止意味着什么?举几个例子:

  • 用户忘记了一些必需的命令行参数,我们抓住它,打印帮助并退出(我会在这里返回EXIT_SUCCESS)

  • 我们读了一个配置文件,其中有一些语法错误,或者找不到它中的文件,所以我们的read-config函数抛出,我们在main中捕获它并退出(我不确定该返回什么地方)

对于其中许多示例,程序按预期运行,它具有正确的行为,因此返回EXIT_SUCCESS是一种情况。但是,该程序没有完成其主要操作,其主要目的是正确的,因为路上有错误,所以说的是EXIT_FAILURE。

我还在考虑用户可能从bash脚本(或来自Matlab或其他)运行程序,并且可能对其返回值感兴趣,以确定它是否已完成其操作。这意味着我们必须在以上所有情况下返回EXIT_FAILURE。

这里的最佳做法是什么?

4 个答案:

答案 0 :(得分:3)

这些程序的返回值是这样的,它们可以在脚本(或序列)中执行,并且脚本可以捕获错误条件(因为脚本不会监视stdout / stderr以获取文本输出),可采取行动继续,中止或试图纠正这种情况。

因此,任何异常终止都是失败的情况。如果你没有传递正确的参数,那么程序会发出帮助文本,它会异常终止,因为程序遇到错误状态(它不知道该怎么做)。如果配置不正确,则表示错误,因此终止异常。

基本上,如果该计划尚未达到其实际目的,则表示尚未成功。

答案 1 :(得分:0)

这取决于您的应用程序。在脚本可以采取不同操作的情况下返回失败。如果你无法想象任何想要记录错误的人,那么这并不重要。

答案 2 :(得分:0)

这取决于你。有脚本的约定,但实质上,退出代码只是一个int,赋予它意义。

参见例如https://superuser.com/questions/280425/getting-robocopy-to-return-a-proper-exit-code

MSDN说:

enter image description here

设计自己的退出代码方案,然后选择good lessons shown by RoboCopy to heart

答案 3 :(得分:0)

来自C ++& C规范,zeroEXIT_SUCCESS的值被建议告诉主机环境(如bash等),程序successfully terminatedEXIT_FAILURE被建议告诉程序unsuccessfully terminated的主机环境,您也可以将返回值或退出状态设置为其他整数值。

因此,如果您想告诉主机环境您的程序运行正常,请返回EXIT_SUCCESS,或返回EXIT_FAILURE告诉主机环境程序无法运行,并返回其他值特定于节目的状态。