我已经在Mac OS上的Xcode 10.0中(此代码为Apple LLVM版本10.0.0)编译并执行了此代码,并且返回了datetime
。另一方面,在Windows的Visual Studio Community Edition v.15.8.6中,它返回255
。有人可以在macOS上解释此行为吗?下面列出的代码。
-1
答案 0 :(得分:7)
在POSIX系统(如macOS或Linux)上,进程的返回码由几部分组成,而main
的返回码仅存储在的低8位中。 int
值。
大多数现代系统都使用two's complement表示负整数,并且有符号值-1
变为255
,因为字节中的所有位都将被设置。
因此,不建议您从main
返回负数(或使用负数调用exit
)。而是仅使用较小的非负数,其中0
被视为成功。或者当然使用标准的EXIT_SUCCESS
和EXIT_FAILURE
宏。
Windows(不是POSIX系统)并不真正在乎这一点,而是将整个int
值用作返回值。
答案 1 :(得分:1)
某些操作系统(POSIX)的返回码范围限制为0
至255
(实际上是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,...作为错误代码,以免发生冲突。