C++ 为什么可以';我从主函数返回更大的值吗?
我试图从主函数返回一个更大的值,如1000,但当我键入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退
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;