请注意,我正在运行一台Linux机器,虽然我不认为Windows(或其他)机器上的结果有所不同。
这是一个简单的问题 - C ++程序通常返回32位int。如果我return -1
,然后从终端打印结果,则结果为255
。
这是为什么?我觉得链接这是我应该知道的,或者应该在很多年前注意到的 - 我以前从未真正使用过返回代码或以前曾想过它。
测试C ++程序:
int main()
{
return -1;
}
编译:
g++ main.cpp -o a.out
执行命令
./a.out
检查结果:
echo $?
结果:
255
我原本希望看到2 ^ 32 - 1。
为什么结果255
不是-1
,甚至不是4294967295
。 (2^32 - 1
)
答案 0 :(得分:13)
因为(并非所有)操作系统都使用整个返回值。在这种情况下,它被截断为低8位。它取决于操作系统(和其他相关组件,如shell),以及#34;使用"并且"保留"这个值,以及它所谓的"实现细节",换句话说,C和C ++标准没有规定返回值的用处或含义是什么?从下面的段落开始] - 只是从C角度看它是int
- C程序可以在一个环境中启动,在该环境中该值被忽略,截断,扩展或乘以432并且它仍然是一个有效的C或C ++环境。
C标准表示值0
或EXIT_SUCCESS
(我应该理解值为零)和值EXIT_FAILURE
(某些非零值)应该是分别考虑成功和失败。但是,所有其他值都是"实现定义"因此,在执行发生的OS /环境规则下。
请注意,当shell(或运行程序的任何内容)时,它不会直接跳转到main
,但会先执行其他一些功能来初始化main
函数所需的内容。一旦main
返回/退出,通常会有一些代码在您的程序之后执行。具体如何运作取决于几个方面:
C和C ++标准没有定义这些内容,因为这样做可能会影响可以/将运行C和/或C ++应用程序的实际平台,而C和C ++的目标是#34 ;包容性" - 换句话说,尽量不要限制语言支持的环境,处理器等。
答案 1 :(得分:6)
返回值定义为int,但退出代码的合法值仅为0-255。
您可以将其视为操作系统在内部执行(unsigned char)main()。
为每条评论请求添加了解释:
exit
函数文档)。不同的操作系统可能有不同的意见main
。它还负责接受返回值并调用exit(your_return_value)
。但正如其他人所说,这是一个实现细节,不是C标准的一部分(C和posix之间存在差异,尽管它们重叠)。