Windows和GNU/Linux中的应用程序的常规返回值分别是什么。0表示成功。但应该在用户请求中止时使用什么。当我在Windows上中止时,它会返回3,但如果该值不是error_PATH_not_FOUND,则该值不在系统错误代码列表中。GNU binutils使用1。从用户的角度来看,返回GetLastError或errno会很好,因为它们都有文档记录,但它们似乎只涵盖较低级别的状态代码。我正在寻找一个代表"应用程序终止失败"的值
我之所以这么做是因为我想
exit(errcode)
来自一个信号处理程序,该信号处理程序在打印关于发生访问违规/SIGSEGV的消息后捕获一些访问违规/SSIGSEGV(即编程错误)。然后,错误代码应该可以从用户输入错误中删除。
这可能会有所帮助,http://tldp.org/LDP/abs/html/exitcodes.html这些是标准的退出代码。我认为他们中的其他人都依赖于程序。基本上,您需要验证您正在寻找的特定软件的文档。正如@devnull所说,任何不为零的退出代码都意味着终止不成功
这只是关于退出代码的少数约定。让我们看看一些手册是怎么说的:
GNU C库参考手册
对于某些程序应该返回的状态值,有一些约定。最常见的约定是0表示成功,1表示失败…
一般惯例为特殊目的保留128及以上的状态值
- 一些非POSIX系统对退出状态使用不同的约定值
- 为了提高可移植性,可以使用宏EXIT_SUCCESS和EXIT_FAILURE对于成功和失败的常规状态值
ISO/IEC 9899:2011(C11标准)
如果status的值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式。如果status的值为EXIT_FAILURE,则返回状态不成功终止的实现定义形式。否则,返回的状态是实现定义的。
这意味着,如果您只想(在大多数情况下,这就足够了)指示成功或失败,那么您肯定应该使用EXIT_success和EXIT_failure。如果你想指出其他错误,你应该重新设计你自己的退出状态。例如:
#define HEX_FILE_CREATE 2
#define HEX_FILE_CREATE 3
...
关于您应该返回什么以及如何返回,还有其他提示:
- 警告:不要试图使用错误数作为退出状态。事实并非如此非常有用;父进程通常不会关心发生了多少错误。更糟的除此之外,它不起作用,因为状态值被截断为八位。因此,如果程序尝试报告256个错误,父级将收到0个错误的报告,即就是成功
- 出于同样的原因,使用errno的值作为退出状态是行不通的——可以超过255
结论:
- 要获得成功,请始终使用EXIT_success
- 您的故障退出状态应介于1和127之间
- 不要使用errno错误代码作为退出状态