23

我试图从我的主函数返回一个更大的值,比如 1000,但是当我输入echo $?它时显示 0。

如果我返回一个较小的值,例如 100,它会显示正确的值。

我的代码:

int main(void)
{
     return 1000;
}

我们可以返回的值是否有任何限制?

4

3 回答 3

24

这里有两个相关的概念:C 退出状态和 bash 返回码。它们都涵盖了 0-255 的范围,但是 bash 出于自己的目的使用高于 126 的数字,因此从程序中返回这些数字会令人困惑。

为了安全起见,将退出状态代码限制为 0-127,因为这是最便携的,至少http://docs.python.org/library/sys.html#sys.exit暗示了这一点。

C 退出状态放入 bash $? 执行后变量,但 bash 使用 127 表示“找不到命令”,因此您可能希望避免这种情况。Bash 参考页面

Bash 还使用 128-255 作为信号 - 它们表明进程被信号杀死: exit code = 128 + signal number. 因此,您可能可以避免使用接近 255 的数字,因为信号数字不太可能达到那么高。

除了这些常见的指导方针之外,还有许多尝试定义不同数字的含义:http ://tldp.org/LDP/abs/html/exitcodes.html 。

所以如果你想从你的程序中返回一个任意整数,最好将它打印到标准输出,并VALUE=$(program)从你的 bash 脚本中捕获它。

于 2010-09-17T09:28:54.700 回答
3

的返回值main(即应用程序的退出状态)在*NIX 上被限制在[0, 255] 范围内。1000 超出范围,操作系统可能将其视为 0。

于 2010-09-17T09:30:30.627 回答
1

在 Unix-land 中,返回值main是有限的,因为exit限制在 8 位字节的范围内。

在 Windows 中,有一个STILL_ACTIVE值为 259 的值,最好避免将其作为进程退出代码。

除此之外,在 Windows 中,您可以返回HRESULT通常执行的 32 位代码,例如和。

于 2014-05-29T17:48:41.343 回答