为什么系统函数在 C++ 中总是返回一个移位的退出状态?

Bou*_*L.A 6 c++

我想启动一个脚本并在 C++ 中获取退出状态。但我注意到系统命令的退出状态总是左移 8 位。为什么系统函数会这样做?

示例代码:

#include <iostream>

using namespace std;

int main()
{
    int exit_code_0 = system("exit 0") >> 8;
    int exit_code_1 = system("exit 1") >> 8;
    int exit_code_2 = system("exit 2") >> 8;
    int exit_code_3 = system("exit 3") >> 8;
    int exit_code_4 = system("exit 4") >> 8;
    int exit_code_255 = system("exit 255")>> 8;
    cout<<"Exit code was: " << exit_code_0 <<", Expected: 0"<< endl;
    cout<<"Exit code was: " << exit_code_1 <<", Expected: 1"<< endl;
    cout<<"Exit code was: " << exit_code_2 <<", Expected: 2"<< endl;
    cout<<"Exit code was: " << exit_code_3 <<", Expected: 3"<< endl;
    cout<<"Exit code was: " << exit_code_4 <<", Expected: 4"<< endl;
    cout<<"Exit code was: " << exit_code_255 <<", Expected: 255"<< endl;
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

检测结果:

Exit code was: 0, Expected: 0                                                                                                                                                       
Exit code was: 1, Expected: 1                                                                                                                                                       
Exit code was: 2, Expected: 2                                                                                                                                                       
Exit code was: 3, Expected: 3                                                                                                                                                       
Exit code was: 4, Expected: 4                                                                                                                                                       
Exit code was: 255, Expected: 255
Run Code Online (Sandbox Code Playgroud)

int*_*jay 10

在 C 和 C++ 标准中,system返回实现定义的值。

在 POSIX 系统中,返回值包含不同值的组合,可以用宏提取。要获得程序的退出状态,您可以使用WEXITSTATUS(return_value),它在您的系统上被定义为右移 8 位。低 8 位包含其他值(例如,让您确定程序是否正常退出或由于信号而退出,等等。)

  • 这是针对 POSIX 的。Windows 不兼容 POSIX。 (2认同)