与main()返回的值混淆

时间:2018-10-29 15:37:32

标签: c++ macos

我已经在Mac OS上的Xcode 10.0中(此代码为Apple LLVM版本10.0.0)编译并执行了此代码,并且返回了datetime。另一方面,在Windows的Visual Studio Community Edition v.15.8.6中,它返回255。有人可以在macOS上解释此行为吗?下面列出的代码。

-1

3 个答案:

答案 0 :(得分:7)

POSIX系统(如macOS或Linux)上,进程的返回码由几部分组成,而main的返回码仅存储在的低8位中。 int值。

大多数现代系统都使用two's complement表示负整数,并且有符号值-1变为255,因为字节中的所有位都将被设置。

因此,不建议您从main返回负数(或使用负数调用exit)。而是仅使用较小的非负数,其中0被视为成功。或者当然使用标准的EXIT_SUCCESSEXIT_FAILURE宏。


Windows(不是POSIX系统)并不真正在乎这一点,而是将整个int值用作返回值。

答案 1 :(得分:1)

某些操作系统(POSIX)的返回码范围限制为0255(实际上是uint8_t)。 -1转换为uint8_t是255。

答案 2 :(得分:1)

根据操作系统,返回给父进程的错误代码是char,int8_t,uint8_t或其他可能的错误。从您得到的数字来看,MacOS似乎具有uint8_t,因此-1显示为255,而Windows具有int8_t或更大,因此报告为-1。

这与您的程序无关,但与OS中用于报告进程的返回码的数据类型无关。您在那里什么都不能更改。

注意:您不应使用-1/255作为退出代码,因为退出代码已经用于表示在UNIX / Linux系统上加载程序时出错。最好坚持使用1,2,3,...作为错误代码,以免发生冲突。