主函数的返回值范围

Nya*_*yan 21 c posix c99 exit-code

关于主要回报值范围的标准说法是什么?说只有255?

因为

int main(void){
return 256;
}
echo $? ;  # out 0
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 19

标准没有说.0,EXIT_SUCCESSEXIT_FAILURE具有(某种)指定的含义.其他任何东西都取决于实施.

目前,大多数基于Unix的系统仅支持8位返回值.Windows支持(至少)32位返回值.我还没有检查64位Windows是否支持64位返回值,但我更加怀疑它,因为即使是64位Windows通常仍然使用32位int.

  • 在64位Windows上我试过`cmd/c"退出4000000000"`然后`echo%errorlevel%`它返回-294967296 => 32位 (2认同)

D.S*_*ley 15

正如其他人所说的那样,C&C++标准除了声明(1)main返回一个int(具有实现定义的大小)和(2)零(或EXIT_SUCCESS)是成功的返回之外,不会限制返回值.EXIT_FAILURE是一次不成功的回归.它确实指定main明确不返回值的a被视为返回零.

在这种情况下,返回值的解释取决于等待进程完成的进程(通过调用wait,waitpidwaitid). waitwaitpid是较旧的POSIX函数,它们指定只有返回值的最低有效8位才可用于等待的父进程.POSIX:2008标准将waitid添加为可以访问子进程的完全退出状态的通用等待方法.

分叉关闭一个子进程后,另一个进程调用的一个等待功能休眠,直到分叉过程完成(例如,从收益main,来电exitabort什么的).在等待waitpid函数功能返回的状态通过一个指向整数的方式.调用者使用WIFEXITED(status_val)WEXITSTATUS(status_val)宏提取实际的退出状态.后者由POSIX定义,并且需要返回status参数的低8位.所述waitid函数使用一个指向siginfo_t结构返回进程的状态信息.该si_status成员包含状态信息中描述的完整状态值.

基本上,退出状态的值在旁观者眼中.ANSI/ISO规范是开放式的.POSIX套件有多种方法可以等待进程完成并获取其退出状态.POSIX还将spawn定义为一个较轻的版本,exec其中有一组对退出状态值的约束.Shell有进一步限制结果值的习惯 - GNU的bash将返回状态限制为7位,而POSIX兼容的shell将退出状态值限制为8位.FWIW,大多数人都认为限制你的回报值低于64似乎是安全的.