Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 被main()返回的值所迷惑_C++_Macos - Fatal编程技术网

C++ 被main()返回的值所迷惑

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值的低位八位 大多数现代

我已经在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
值的低位八位

大多数现代系统使用表示负整数,有符号值
-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,。。。作为错误代码以避免冲突