Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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 主函数的返回值范围_C_Posix_C99_Exit Code - Fatal编程技术网

C 主函数的返回值范围

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上,

标准对主要返回值范围有何规定? 最多只能说255

因为

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
    成员包含中所述的完整状态值

    基本上,