为什么main的默认返回值是0而不是EXIT_SUCCESS?

Pra*_*eek 23 c++ standards program-entry-point return

ISO 1998 c ++标准规定,在main中没有显式使用return语句等同于使用return 0.但是,如果一个实现具有不同的标准"无错误"代码-1呢?

为什么不使用标准的宏EXIT_SUCCESS将要么被替换0或者-1还是取决于执行任何其他价值?

C++似乎强制程序的语义,这不是一种语言的角色,它应该只描述程序的行为方式.此外,"错误"返回值的情况不同:只有EXIT_FAILURE标准的"错误"终止标志,没有明确的值,例如"1".

这些选择的原因是什么?

Mic*_*urr 35

从零回归main()与你所要求的基本相同.返回零main()不必返回零到主机环境.

从C90/C99/C++ 98标准文件:

如果status的值为零EXIT_SUCCESS,则返回状态成功终止的实现定义形式.

  • 只是为了澄清,这是为exit()函数指定的,而3.6.1:5表示从main返回的效果是离开main然后调用exit().所以是的,你是对的.:) (4认同)
  • @Serious:但是更直接地回答你的问题 - 如果程序的执行环境期望1表示成功而0表示失败,那么main()的"return 0"应该可以将程序的退出代码设置为1.并且"返回EXIT_FAILURE"应该将程序的退出代码设置为0.但我希望这些环境非常罕见,因为成功的C和Unix解释为0已经非常有影响力. (4认同)

Bas*_*ard 18

实际上,return 0不一定会返回0!我在这里引用C标准,因为这是我最了解的.

关于returnmain():

5.1.2.2.3程序终止

如果main函数的返回类型是兼容的类型int,则从初始调用返回main函数等效于调用exit函数返回的main函数作为其参数;

关于exit():

7.20.4.3退出功能
概要

#include <stdlib.h>
void exit(int status);
Run Code Online (Sandbox Code Playgroud)

[...]
最后,控制权返回给主机环境.如果值status为零或 EXIT_SUCCESS,则返回状态成功终止的实现定义形式.

  • 你在哪里看到这样的冲突来自哪里?编译器负责使其工作.最简单的方法是#define EXIT_SUCCESS 0,但这只是一个选项. (4认同)

Otá*_*cio 5

标准只是确定未明确设置时必须是什么值.开发人员可以显式设置返回值,也可以为默认值假设适当的语义.我不认为该语言试图强迫开发人员使用任何语义.