2010-09-17 113 views
20

我想从我的主要功能回到像1000更大的价值,但是当我键入echo $?它显示为0。为什么我不能从主函数返回更大的值?

如果我回到喜欢它100显示正确的值小的值。

我的代码:

int main(void) 
{ 
    return 1000; 
} 

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

+0

我得到** 232 **为'return 1000;'和** 233 **为'return 1001;' – Lazer 2010-09-17 11:29:09

+5

** 1000%256 = 232 ** – Lazer 2010-09-17 11:41:49

回答

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

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

+0

我相信范围是0-255(即* uint8_t'范围)在* NIX系统上 - 不熟悉任何最大值为127的系统(这意味着一个带符号的返回类型等同于“int8_t”,但这也意味着-128的下限)。 – 2010-09-17 09:31:30

+0

+1感谢您的解释:) – Searock 2010-09-17 09:52:35

+0

除了告诉错误的范围(如@Jonathan注意到的),您似乎也混淆了程序退出状态(由'waitpid(2)'报告)和shell命令退出状态由'$?'报道)。 “128-255用于信号”仅适用于后者。 – 2010-09-17 10:50:40

3

main的返回值(即应用程序的退出状态)限制在* NIX的范围[0,255]。 1000超出范围,并且操作系统将其视为0,据推测。

+2

不,至少在bash中,大于255的退出状态返回模256的值。1000将返回232 – 2010-09-17 09:44:35

+0

这就是我所假设的,基于C如何处理数字,但OP说他得到了0作为他的结果。 – 2010-09-17 10:52:55

1

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

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

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

相关问题