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

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

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

代码是最基本的:

int main()
    {
        return -1;
    }

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

echo $?
255

答案1

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

编辑添加:

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

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

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

答案2

引用手册bash退出状态

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

所以它限制在这个范围内,我实际上和你一样感到惊讶。

waitpid (2)手册页:

WEXITSTATUS(status)

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

相关内容