为什么返回-1时出现255错误255


10

我是C ++编程的新手,我有一个非常基本的问题。我注意到,当我返回-1C ++程序然后检查退出状态时,我得到了255。这是为什么?

该代码是最基本的:

int main()
    {
        return -1;
    }

然后,在运行编译的代码之后:

echo $?
255

Answers:


24

因为在UNIX / POSIX中,程序的退出代码被定义为无符号的8位值。将-1转换为无符号的8位将得到255。

编辑添加:

详细说明:UNIX中的wait *()系列系统调用将处理结果编码为单个32位整数。该结果的32位被进一步分解,以提供诸如进程是否转储核心,是否由于信号(以及哪个信号)而退出等信息。在这32位中,只有8位保留给进程的退出代码那些被解释为无符号值。

UNIX / POSIX的fork / exec / wait模型是其最古老,最深入的特性之一。如果今天要设计一个新的操作系统,则可能会做一些不同的事情(至少使用64位:-)。

另一方面,实际上,> 255个退出代码真的有用吗?我对此表示怀疑。如果您确实想要更强大的功能,建议您改用“退出字符串”,而不是范围更广的数字退出代码。


尼斯编辑。感谢您提供其他信息。
乔治M

7

引用退出状态bash手册页

已执行命令的退出状态是waitpid系统调用或等效函数返回的值。退出状态介于0到255之间,但是,如下所述,shell可能会特别使用125以上的值。Shell内置命令和复合命令的退出状态也限制在此范围内。在某些情况下,外壳将使用特殊值来指示特定的故障模式。

因此,将其限制在该范围内,我实际上和您一样感到惊讶。

waitpid (2)手册页:

WEXITSTATUS(status)

返回子项的退出状态。它由状态参数的最低有效8位组成,该状态参数是子对象在对exit(3)或_exit(2)的调用中指定的或作为main()中return语句的参数指定的。仅当WIFEXITED返回true时才应使用此宏。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.