进程的退出代码是否会溢出小值?

Can the exit code of a process overflow for small values?

我正在编写一个测试框架,在 main() 中我 return 失败测试的数量。例如:

int main() {
    int failedTests = runTests();
    return failedTests;
}

那么这个"int"会溢出吗?当我实际上 return 编辑了不同于 0 的东西时,我可以让 %ERROR_LEVEL% 变成 == 0 吗?它取决于主机操作系统吗?通常的最大值是多少?我可以确定小于 32768(2^16 - 短整数)的整数总是合适的吗?

编辑:

我遇到了 python sys.exit 的问题,它(几乎)总是使用 0-127 范围,所以我现在很小心

是的,它可以像其他任何东西一样溢出 int

标准将 int 描述为至少 16 位宽。返回不适合 int 的任何内容是未定义的行为。

C++ 程序运行的环境对值的作用是实现定义的,标准没有描述。

C++ 标准提到了三个值:EXIT_SUCCESSEXIT_FAILURE00EXIT_SUCCESS 都表示程序执行成功,而另一个定义失败。 EXIT_SUCCES 不需要为零。

引用C++11标准:

If status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned. If status is EXIT_- FAILURE, an implementation-defined form of the status unsuccessful termination is returned. Otherwise the status returned is implementation-defined.225

支持的常用值因实现而异,Windows使用完整的 32 位整数作为 return 值,完整的 32 位可以通过各种方式获得。 POSIX 只指定了如何获得低 8 位,因此 shell 经常截断值 returned.

这取决于操作系统。在 Linux 上,它被限制为 8 位,因此可以是 0(表示成功)或任何不大于 255 的正整数。参见 _exit(2) & wait(2)

只有两个值被标准化(按名称):EXIT_SUCCESS(通常为 0)和 EXIT_FAILURE(通常为 1)。请注意,该标准定义了名称(可能还定义了 exit(0);... 的行为)但未定义它们的值。

您可以将(失败测试的)数量写入 stdout 或通过某些程序参数指定的某些文件。

FreeBSD 已在其 sysexits(3) a set of exit names and codes, but they are not standardized, e.g. in POSIX. See POSIX documentation on exit 中定义。