我试图从我的main函数返回一个更大的值,如1000,但当我输入echo $?
时,它显示为0.
如果我返回一个较小的值,如100,则显示正确的值。
我的代码:
int main(void)
{
return 1000;
}
我们可以返回的值有限制吗?
答案 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
,这通常是完成的。