在C ++应用程序的主函数中,何时应该返回EXIT_SUCCESS和EXIT_FAILURE?成功终止意味着什么?举几个例子:
用户忘记了一些必需的命令行参数,我们抓住它,打印帮助并退出(我会在这里返回EXIT_SUCCESS)
我们读了一个配置文件,其中有一些语法错误,或者找不到它中的文件,所以我们的read-config函数抛出,我们在main中捕获它并退出(我不确定该返回什么地方)
对于其中许多示例,程序按预期运行,它具有正确的行为,因此返回EXIT_SUCCESS是一种情况。但是,该程序没有完成其主要操作,其主要目的是正确的,因为路上有错误,所以说的是EXIT_FAILURE。
我还在考虑用户可能从bash脚本(或来自Matlab或其他)运行程序,并且可能对其返回值感兴趣,以确定它是否已完成其操作。这意味着我们必须在以上所有情况下返回EXIT_FAILURE。
这里的最佳做法是什么?
答案 0 :(得分:3)
这些程序的返回值是这样的,它们可以在脚本(或序列)中执行,并且脚本可以捕获错误条件(因为脚本不会监视stdout / stderr以获取文本输出),可采取行动继续,中止或试图纠正这种情况。
因此,任何异常终止都是失败的情况。如果你没有传递正确的参数,那么程序会发出帮助文本,它会异常终止,因为程序遇到错误状态(它不知道该怎么做)。如果配置不正确,则表示错误,因此终止异常。
基本上,如果该计划尚未达到其实际目的,则表示尚未成功。
答案 1 :(得分:0)
这取决于您的应用程序。在脚本可以采取不同操作的情况下返回失败。如果你无法想象任何想要记录错误的人,那么这并不重要。
答案 2 :(得分:0)
这取决于你。有脚本的约定,但实质上,退出代码只是一个int,你赋予它意义。
参见例如https://superuser.com/questions/280425/getting-robocopy-to-return-a-proper-exit-code
MSDN说:
设计自己的退出代码方案,然后选择good lessons shown by RoboCopy to heart
答案 3 :(得分:0)
来自C ++& C规范,zero
或EXIT_SUCCESS
的值被建议告诉主机环境(如bash等),程序successfully terminated
和EXIT_FAILURE
被建议告诉程序unsuccessfully terminated
的主机环境,您也可以将返回值或退出状态设置为其他整数值。
因此,如果您想告诉主机环境您的程序运行正常,请返回EXIT_SUCCESS
,或返回EXIT_FAILURE
告诉主机环境程序无法运行,并返回其他值特定于节目的状态。