这个问题出于好奇; 在为测试程序编写main时,我没有返回任何内容main(没有return声明main).但我宣称主要是int main().它编译成功.
如果有任何其他函数用int返回类型编写并且实际上没有返回int,我会得到一个错误
'函数名'必须返回值
那么为什么编译器不会为main功能抱怨相同?
Tam*_*lei 10
通常,不允许控制流到达非空函数的末尾而不返回某些内容.main按标准规定,该功能的处理方式不同.
来自http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2960.pdf:
§3.6.1/ 5
如果控制到达main的末尾而没有遇到return语句,则效果是执行return 0;
至于理由,老实说,我不确定.如果有人知道,请将其添加到我的答案或作为评论.
在 C++ 中,int main()可以不带返回值,此时它默认返回 0。
5.1.2.2.3 程序终止
1 如果 main 函数的返回类型是与 int 兼容的类型,则从初始调用 main 函数返回相当于以 main 函数返回的值作为参数调用 exit 函数;11) 到达 }终止 main 函数返回值 0。如果返回类型与 int 不兼容,则返回给宿主环境的终止状态是未指定的。
但是你应该更好地使用 EXIT_SUCCESS或EXIT_FAILURE从main().
即使您返回的是 int,某些操作系统 (Windows) 也会将返回值截断为单个字节 (0-255)。Unix 和大多数其他操作系统可能一样。返回 EXIT_SUCCESS 或 EXIT_FAILURE 以外的任何东西都是自找麻烦
来自GNU 库的引用
一些非 POSIX 系统对退出状态值使用不同的约定。为了获得更大的可移植性,您可以分别使用宏 EXIT_SUCCESS 和 EXIT_FAILURE 作为成功和失败的常规状态值。它们在文件 stdlib.h 中声明。
— 宏:int EXIT_SUCCESS 此宏可与退出函数一起使用以指示程序成功完成。
在 POSIX 系统上,该宏的值为 0。在其他系统上,该值可能是其他(可能是非常量)整数表达式。
— 宏:int EXIT_FAILURE 此宏可与 exit 函数一起使用,以在一般意义上指示不成功的程序完成。
在 POSIX 系统上,该宏的值为 1。在其他系统上,该值可能是其他(可能是非常量)整数表达式。其他非零状态值也表示失败。某些程序使用不同的非零状态值来指示特定类型的“不成功”。例如,diff 使用状态值 1 表示文件不同,使用状态值 2 或更多表示打开文件有困难。