C++程序返回int类型,为什么return -1返回255呢?

标签 c++ c operating-system integer return-value

<分区>

请注意,我运行的是 linux 机器,尽管我认为在 windows(或其他)机器上的结果没有什么不同。

这是一个简单的问题 - C++ 程序通常返回 32 位 int。如果我返回-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)

最佳答案

因为(不是所有)操作系统使用整个返回值。在本例中,它被截断为低 8 位。 “使用”和“保留”这个值取决于操作系统(和其他相关组件,例如 shell),这就是所谓的“实现细节”,换句话说,C 和 C++ 标准没有说明什么返回值的用处或意义是 [除了下面的段落] - 只是从 C 的角度来看它是一个 int - C 程序可能会在该值被忽略、截断、扩展或乘以 432 的环境中启动,并且它仍然是有效的 C 或 C++ 环境。

C 标准规定值 0EXIT_SUCCESS (据我所知应该是零值)和值 EXIT_FAILURE (一些非零值)应该分别被认为是成功和失败。但是,所有其他值都是“实现定义的”,因此在执行发生的操作系统/环境的规则下。

请注意,当 shell(或任何运行您的程序的程序)时,它不会直接跳转到您的 main。 ,但首先执行一些其他功能来初始化您的 main 所需的东西功能。还有一次main已经返回/退出,通常也会有一些代码在你的程序之后执行。具体如何工作取决于几件事:

  • 谁编写了编译器和/或运行时库
  • 它是为什么操作系统设计的
  • 它是什么处理器架构
  • 可能是什么 shell/runtime/OS 功能启动了这个过程

C 和 C++ 标准没有定义这些东西,因为这样做可能会影响能够/将要运行 C 和/或 C++ 应用程序的实际平台,而 C 和 C++ 的目标是“包容”-换句话说,尽量不要限制语言支持的环境、处理器等。

关于C++程序返回int类型,为什么return -1返回255呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626445/

相关文章:

c++ - 为什么符号扩展错误具有很高的安全风险?

bash - 用于查找机器操作系统的 Shell 脚本

c++ - vector 无效分配大小

c++ - 如何使用正则表达式 C++ 将文本文件解析为变量?

c - 在 C if 语句中检查 NULL 时最好使用 OR 或 AND?

linux - 内核控制路径和内核线程之间有什么关系?

c - 我如何用我的内核创建可引导 CD 镜像?

c++ - Webots Visual Studio 交叉编译

c++ - 如何在 2D 中绘制/变形 QImage?

c - 带两个可用的加权间隔调度 "workers"