C 主函数的返回值范围
标准对主要返回值范围有何规定? 最多只能说255 因为C 主函数的返回值范围,c,posix,c99,exit-code,C,Posix,C99,Exit Code,标准对主要返回值范围有何规定? 最多只能说255 因为 int main(void){ return 256; } echo $? ; # out 0 在类Unix系统上,退出代码是介于0和255之间的数字(包括0和255)。您可以返回任何内容,但在Linux中它是modded 256。浏览一下Linux返回代码的详细解释。还有一个关于Windows退出代码的简短讨论 返回类型int。您应该能够返回可存储在int中的任何值。int的确切大小取决于实现,因此我无法给出确切的范围 在Unix上,
int main(void){
return 256;
}
echo $? ; # out 0
在类Unix系统上,退出代码是介于0和255之间的数字(包括0和255)。您可以返回任何内容,但在Linux中它是modded 256。浏览一下Linux返回代码的详细解释。还有一个关于Windows退出代码的简短讨论 返回类型
int
。您应该能够返回可存储在int
中的任何值。int
的确切大小取决于实现,因此我无法给出确切的范围
在Unix上,wait系统调用设置
int类型的状态值打包为
具有各种类型子项的位字段
终止信息。如果孩子
通过退出(如确定)终止
通过妻子退出的宏;通常的
另一种选择是它死于
未捕获信号),SUS指定
状态值的低8位
包含退出状态;这个可以
可以使用WEXITSTATUS检索
宏正在等待。因此,在Unix上
退出状态仅限于值
0-255,无符号8位的范围
整数
类Unix系统通常使用
成功与非成功的零原则公约
零表示错误。一些惯例
发展到相对
各种错误代码的含义;对于
示例GNU建议使用
高位设置将保留给
严重错误,并且FreeBSD
记录了大量的
首选解释
C99标准仅定义0和1。但是,允许使用其他值
有关更多信息,请参见wiki
5.1.2.2.3如果主功能的返回类型为a,程序终止1
与int兼容的类型,返回值
从最初的调用到主
函数相当于调用
返回值后退出函数
以主功能作为其论据;
10) 到达终止
main函数返回一个值0。如果
返回类型与不兼容
int,返回终止状态
对宿主环境的访问是未指定的
也就是说,它不需要归还任何东西。然而,它有力地说明了通常的定义是什么。几乎暗示他们是标准的,但有一张免出狱卡,这意味着它可以是任何东西。标准没有说明<代码>0,
退出成功
和退出失败
具有(某种)特定的含义。其他一切都取决于实现
目前,大多数基于Unix的系统只支持8位返回值。Windows支持(至少)32位返回值。我没有检查64位Windows是否支持64位返回值,但我对此表示怀疑,因为即使是64位Windows通常也使用32位int。C标准对退出代码没有特别的限制,关于
main
返回值的段落将委托给关于exit()的文档
函数,该函数依次表示:
如果status的值为零或EXIT_SUCCESS
,则返回状态successful termination的实现定义形式。如果状态值为退出失败,则返回状态未成功终止的实现定义形式。否则,返回的状态是实现定义的
除了退出成功
/退出失败
指南之外,它基本上意味着“想做什么就做什么”<代码>:)
正如在一篇评论中所说,在POSIX系统上,实际上只考虑退出代码的低8位这一事实只是一个UNIXism,它源自系统调用的设计方式(退出状态必须打包在wait
返回值的低8位中),与C标准无关
一个反例是Windows,其中考虑传递给exit
/return
的整个值(只要它不大于DWORD
1,但我认为它们永远不会使int
大于DWORD
,就会破坏很多代码)
1.因为返回这个值的参数是<代码> dWord */COD> .
,正如其他人所说的,C&C++标准不限制返回值,而不限制状态< /P>
main()
返回一个int
(其大小由实现定义),并且EXIT\u SUCCESS
)是成功返回,EXIT\u FAILURE
是不成功返回main()
被视为返回了零
在这种情况下,返回值的解释取决于等待进程完成的进程(通过调用或)wait()
和waitpid()
是较旧的POSIX函数,它们仅指定此函数。POSIX:2008标准添加了waitid()
,作为一种通用的等待方法,可以访问子进程的完全退出状态
分叉子进程后,父进程调用其中一个wait*()
函数休眠,直到分叉进程完成(例如,从main()
返回,调用exit()
或abort()
或其他内容)。wait()
和waitpid()
函数通过指向整数的指针返回状态。调用方使用WIFEXITED(status\u val)
和WEXITSTATUS(status\u val)
宏提取实际退出状态。后者由POSIX定义,需要返回。waitid()
函数使用指向siginfo\u t
结构的指针返回进程的状态信息。si_status
成员包含中所述的完整状态值
基本上,