进程的退出代码是否会溢出小值?
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_SUCCESS
、EXIT_FAILURE
和 0
。 0
和 EXIT_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 中定义。
我正在编写一个测试框架,在 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_SUCCESS
、EXIT_FAILURE
和 0
。 0
和 EXIT_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 中定义。