繁体   English   中英

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

[英]When should I return EXIT_SUCCESS and when EXIT_FAILURE? What does successful termination mean?

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

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

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

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

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

这里的最佳做法是什么?

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

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

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

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

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

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

MSDN说:

在此输入图像描述

设计自己的退出代码方案,并将RoboCopy展示优秀课程牢记于心

从C ++和C规范中,建议zeroEXIT_SUCCESS的值告诉主机环境(如bash等)程序successfully terminated ,并建议EXIT_FAILURE告诉主机环境程序unsuccessfully terminated ,你可以还将返回值或退出状态设置为其他整数值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM