C++ 被main()返回的值所迷惑
我已经在Xcode 10.0(clang:Apple LLVM 10.0.0版)的macOS上编译并执行了这段代码,它返回了C++ 被main()返回的值所迷惑,c++,macos,C++,Macos,我已经在Xcode 10.0(clang:Apple LLVM 10.0.0版)的macOS上编译并执行了这段代码,它返回了255。另一方面,在Visual Studio Community Edition v.15.8.6的Windows上,它将返回-1。有人能解释一下macOS上的这种行为吗?代码如下所列 int main() { return -1; } 在系统(如macOS或Linux)上,进程的返回代码由多个部分组成,而main的返回代码仅存储在int值的低位八位 大多数现代
255
。另一方面,在Visual Studio Community Edition v.15.8.6的Windows上,它将返回-1
。有人能解释一下macOS上的这种行为吗?代码如下所列
int main() {
return -1;
}
在系统(如macOS或Linux)上,进程的返回代码由多个部分组成,而main
的返回代码仅存储在int
值的低位八位
大多数现代系统使用表示负整数,有符号值-1
变为255
,因为字节中的所有位都将被设置
因此,不建议您从main
返回负数(或使用负数呼叫)。相反,只使用较小的非负数,其中0
被视为成功。当然,也可以使用标准的EXIT\u SUCCESS
和EXIT\u FAILURE
宏
Windows不是POSIX系统,它并不真正关心这一点,而是使用整个
int
值作为返回值。某些OSs(POSIX)的返回代码范围限制为0
到255
(实际上是uint8\t
)<代码>-1转换为uint8\u t
是255。根据操作系统的不同,返回到父进程的错误代码是char、int8\u t、uint8\u t或其他任何可能的代码。从您得到的数字来看,MacOS似乎有uint8\u t,因此-1显示为255,而Windows有int8\u t或更大,因此报告了-1
这与您的程序无关,而是与操作系统中用于报告进程返回代码的数据类型有关。在那里你什么都不能改变
注意:您不应该使用-1/255作为退出代码,因为它已经被用来表示在unix/linux系统上加载程序时出错。最好坚持1,2,3,。。。作为错误代码以避免冲突