为什么我的shell只检测0到255之间的返回码?

Tre*_*key 2 c++ bash shell zsh return-code

参加以下C++程序:

#include <cstdlib>
int main(){exit(-1);}
Run Code Online (Sandbox Code Playgroud)

当我在任何运行这个程序zsh,bash或者sh,我得到如下结果:

$ ./test
$ echo $?
255
$
Run Code Online (Sandbox Code Playgroud)

如果我跑:

#include <cstdlib>
int main(){exit(256);}
Run Code Online (Sandbox Code Playgroud)

它产生以下结果:

$ ./test
$ echo $?
0
$
Run Code Online (Sandbox Code Playgroud)

shell解释0到255之间的返回码是否正常?
是否有可能产生超出此范围的值?

Ker*_* SB 5

C++允许您从main:EXIT_SUCCESS和返回两个值EXIT_FAILURE.返回EXIT_SUCCESS与返回0相同,与调用具有相同的效果std::exit(0).

返回值以实现定义的方式传递回操作系统,操作系统对该值的作用也是实现定义的.最后,返回任何其他值的语义main也是实现定义的.

C++在这个问题上没有更多的话要说.您需要查阅平台的文档.

  • 从Open Group规范(Posix)http://pubs.opengroup.org/onlinepubs/009695399/functions/exit.html <<只有[exit()的状态参数的最低有效8位]才可用于等待父进程>> (2认同)
  • @chepner - `EXIT_SUCCESS`用于为`EXIT_FAILURE`提供并行构造.返回0与"EXIT_SUCCESS"具有相同的效果,无论操作系统的返回代码约定如何,它都能正常工作; 运行时系统会将0映射到任何适当的值. (2认同)