C ++为什么main工作没有返回值

时间:2013-10-10 10:45:50

标签: c++

这个问题出于好奇;在为测试程序编写main时,我没有从main返回任何内容(return中没有main语句)。但是我将main声明为int main()。它编译成功。

如果有任何其他函数使用int返回类型编写并且实际上没有返回int,我会收到错误

  

'函数名'必须返回值

那么为什么编译器不会对main函数抱怨相同?

2 个答案:

答案 0 :(得分:8)

通常,如果不返回某些内容,控制流不允许到达非void函数的末尾。 main函数的处理方式不同,如标准中所述。

来自http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2960.pdf

§3.6.1/ 5

  

如果控制到达main的末尾而没有遇到返回   声明,效果是执行返回0;

至于理由,老实说,我不确定。如果有人知道,请将其添加到我的答案或作为评论。

答案 1 :(得分:1)

在C ++中,int main()可以没有返回值,此时它默认返回0.

  

5.1.2.2.3程序终止

     

1如果main函数的返回类型是兼容的类型   int,从初始调用到main函数的返回是等价的   使用main返回的值调用exit函数   作为其参数的函数; 11)到达终止主要的}   函数返回值0.如果返回类型不兼容   使用int,返回到主机环境的终止状态是   未指定的。

但您应该更好地使用EXIT_SUCCESSEXIT_FAILUREmain()返回。

  

即使你正在返回一个int,一些操作系统(Windows)也会截断   返回值为单个字节(0-255)。 Unix也是这样做的   大多数其他操作系统可能。回收除了以外的任何东西   EXIT_SUCCESS或EXIT_FAILURE要求麻烦

来自GNU Library的报价

  

某些非POSIX系统对退出状态使用不同的约定   值。为了更好的可移植性,您可以使用宏EXIT_SUCCESS   和EXIT_FAILURE表示成功的常规状态值   失败,分别。它们在文件stdlib.h中声明。

     

- Macro:int EXIT_SUCCESS此宏可以与exit一起使用   表示程序完成成功的功能。

     

在POSIX系统上,此宏的值为0.在其他系统上,   value可能是其他(可能是非常量)整数表达式。

     

- Macro:int EXIT_FAILURE此宏可以与exit一起使用   在一般情况下表示程序完成失败的功能   感。

     

在POSIX系统上,此宏的值为1.在其他系统上,   value可能是其他(可能是非常量)整数表达式。   其他非零状态值也表示失败。某些程序   使用不同的非零状态值来指示特定种类   “不成功”。例如,diff使用状态值1来表示   文件是不同的,2或更多意味着有困难   打开文件。