22

作为学校的作业,我们必须编写一个 C++ 程序并在main.

问题是如果发生特定错误,我们必须返回-2,但我不知道如何返回负值。

例如:

int main()
{ 
    int a = -2; 
    return a;
}

在 Windows 中,这给了我一个返回值,例如:42232684而在 Linux 中,有:253

为什么-2不允许?

我怎么能设法得到-2

4

3 回答 3

10

问题是返回给操作系统的内容随后会由操作系统外壳按照 IT 的喜好进行解释,而不是按照您的程序的喜好进行解释。

主函数返回一个 int,return -2这正是你的程序必须做的。

253 是 2 秒补码到 8 位的 -2。

问题 - 这里 - 是 C++ 规范 ( int main()) 和 shell 使用它的方式之间的不匹配。但它不依赖于程序。

任务本身就是一个陷阱。

于 2013-09-19T09:37:47.537 回答
4

从 C++11 标准 18.5/8 开始:

如果状态为零或 EXIT_SUCCESS,则返回状态成功终止的实现定义形式。如果状态为 EXIT_FAILURE,则返回状态不成功终止的实现定义形式。否则返回的状态是实现定义的。

因此,对于不同的平台和/或编译器,您获得不同的结果是否完全符合要求。

于 2013-09-19T09:38:28.570 回答
2

Unix 和 linux 限制为 8 位返回码,-2 为 0xfe。你的 shell 会理解为 254 当你echo $?

您应该提供 0 到 255 之间的返回码。

http://en.wikipedia.org/wiki/Exit_status

在与 POSIX 兼容的退出状态上,值限制为 0-255,即无符号 8 位整数的范围。

于 2013-09-19T09:24:40.007 回答