为什么我不能从main函数返回更大的值?

时间:2010-09-17 09:27:44

标签: c++ linux exit-code

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

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

我的代码:

int main(void)
{
     return 1000;
}

我们可以返回的值有限制吗?

3 个答案:

答案 0 :(得分:22)

这里有两个相关的概念:C退出状态和bash返回代码。它们都覆盖范围0-255,但是bash使用126以上的数字用于它自己的目的,所以从你的程序返回它们会很困惑。

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

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

Bash也使用128-255作为信号 - 它们表示进程被信号杀死: exit code = 128 + signal number。所以你可能能够使用接近255的数字,因为信号数字不太可能达到那么高。

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

因此,您希望从程序中返回任意整数,最好将其打印到stdout,然后使用bash脚本中的VALUE=$(program)捕获它。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

除此之外,在Windows中,您可以返回32位代码,例如HRESULT,这通常是完成的。