C++ 为什么可以';我从主函数返回更大的值吗?

C++ 为什么可以';我从主函数返回更大的值吗?,c++,linux,exit-code,C++,Linux,Exit Code,我试图从主函数返回一个更大的值,如1000,但当我键入echo$?时,它显示0 如果我返回一个较小的值,如100,它将显示正确的值 我的代码: int main(void) { return 1000; } 我们可以返回的值有任何限制吗?这里有两个相关的概念:C退出状态和bash返回代码。它们都覆盖0-255的范围,但是bash出于自身的目的使用126以上的数字,因此从程序返回这些数字会让人困惑 为了安全起见,将出口状态代码限制为0-127,因为这是最可移植的,至少这是所暗示的 C退

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

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

我的代码:

int main(void)
{
     return 1000;
}

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

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

为了安全起见,将出口状态代码限制为0-127,因为这是最可移植的,至少这是所暗示的

C退出状态被放入bash$?变量,但bash使用127指示“未找到命令”,因此您可能希望避免这种情况

Bash还使用128-255作为信号-它们表示进程被一个信号终止:
退出代码=128+信号号
。因此,您可能可以使用接近255的数字,因为信号数字不太可能达到这么高

除了这些共同的指导原则外,还有许多人试图定义不同的数字的含义:


如果您想从程序中返回任意整数,最好将其打印到stdout,并使用bash脚本中的
VALUE=$(program)
捕获它。

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

为了安全起见,将出口状态代码限制为0-127,因为这是最可移植的,至少这是所暗示的

C退出状态被放入bash$?变量,但bash使用127指示“未找到命令”,因此您可能希望避免这种情况

Bash还使用128-255作为信号-它们表示进程被一个信号终止:
退出代码=128+信号号
。因此,您可能可以使用接近255的数字,因为信号数字不太可能达到这么高

除了这些共同的指导原则外,还有许多人试图定义不同的数字的含义:


因此,如果您希望从程序返回任意整数,最好将其打印到标准输出,并使用bash脚本中的
VALUE=$(program)
捕获它。

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

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

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

在Windows中有一个值,
仍然处于活动状态,值为259,最好避免将其作为进程退出代码


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

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

在Windows中有一个值,
仍然处于活动状态,值为259,最好避免将其作为进程退出代码


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

我相信*NIX系统上的范围是0-255(即
uint8\u t
),不熟悉任何最大值为127的系统(这意味着有符号返回类型相当于
int8\u t
,但也意味着下限为-128。)除了告诉不正确的范围(如@Jonathan所述),您似乎还混淆了程序退出状态(如
waitpid(2)
所报告)和shell命令退出状态(如
$?
所报告)。“128-255用于信号”仅适用于后者。我认为*NIX系统上的范围是0-255(即
uint8_t
),不熟悉任何最大值为127的系统(这意味着有符号返回类型等同于
int8_t
,但也意味着下限为-128)除了告诉不正确的范围(如@Jonathan所述),您似乎还混淆了程序退出状态(如
waitpid(2)
所报告)和shell命令退出状态(如
$?
所报告)。“128-255用于信号"只适用于后者。不,至少在bash中,大于255的退出状态返回模256的值。根据C处理数字的方式,1000将返回232这是我的假设,但OP说他得到的结果是0。不,至少在bash中,大于255的退出状态返回模256的值。1000将返回模232根据C处理数字的方式,我会假设,但OP说他的结果是0。对于
return 1000;
我得到232,对于
return 1001;
我得到233;
对于
return 1000;
我得到232,对于
return 1001;