为什么在C ++的某些编译器中使用int main()时不必包含return语句? Turbo C ++怎么样?
答案 0 :(得分:41)
在C ++和C99和C11中,如果控制流到达main
函数的末尾,则该语言的特殊规则是,函数impliclty返回0
。
答案 1 :(得分:26)
在C ++和C99 / C11中,在main函数中没有return语句,默认返回0 ;
§3.6.1主要功能
main中的return语句具有离开main函数(销毁具有自动存储持续时间的任何对象)并使用返回值作为参数调用std :: exit的效果。如果控制到达main的末尾而没有遇到return语句,则效果是执行return 0;
还阅读了wiki页面C/C++ main function
如果程序员没有定义返回值,则隐式返回0;在main()函数的末尾由编译器插入; C ++标准需要此行为。
答案 2 :(得分:13)
main
必须返回int
,某些编译器(包括Turbo C ++)可能会允许其他返回值,尤其是void main
,但这是错误的,从不使用它。
但是在C ++中,如果您没有在main
中显式返回值,则它与return 0;
C ++11§3.6.1主要功能第5节
main中的return语句具有离开main函数(销毁具有自动存储持续时间的任何对象)并使用返回值作为参数调用std :: exit的效果。如果控制到达main的末尾而没有遇到return语句,则效果是执行
return 0;
请注意,对于C,仅在C99及更高版本中支持此功能,但C89不支持此功能。
答案 3 :(得分:4)
标准规定,如果没有main
声明,0
将返回return
。来自draft C++ standard部分3.6.1
段5
:
main中的语句具有离开main函数的效果(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用std :: exit。 如果控件到达main的末尾而没有遇到return语句,则效果是执行 return 0;
C99
部分中的5.1.2.2.3
草案标准说:
如果main函数的返回类型是与int兼容的类型,则从中返回 对main函数的初始调用相当于使用值调用exit函数 由main函数返回作为其参数; 10)到达终止该函数的} main函数返回值0。
据我所知,Turbo C++的最后一个版本已经很老了,我找不到任何定义哪个标准的东西。
答案 4 :(得分:0)
除了符合任意语言标准外,没有令人信服的理由在主函数结束时返回值。
这只是因为流行操作系统上的进程具有已终止进程的返回代码概念。不难想象一个他们不需要返回任何价值的操作系统。您还可以想象一个世界,其中0被所有进程隐式返回,除非被覆盖 - 在这种情况下,您可以将返回代码决策委派给系统调用。 (实际上,这种系统调用已经以C的退出函数的形式存在)。
答案 5 :(得分:0)
正如其他人所说,有些编译器并不要求你明确return 0;
但是,(如果可能的话)总是一个好主意。我不鼓励使用任何禁止你从主函数返回的编译器。
我想注意int main的返回值非常重要,实际上有用。
main的返回值有时被称为程序中的exit status
或error code
,零表示它已成功完成。其他程序和脚本可以访问此代码以确定您的程序是否成功完成。
答案 6 :(得分:0)
无论您是否明确指定,TC都将返回EXIT_SUCCESS