int main()函数必须在所有编译器中返回一个值吗?

时间:2013-08-23 12:27:10

标签: c++ turbo-c++

为什么在C ++的某些编译器中使用int main()时不必包含return语句? Turbo C ++怎么样?

7 个答案:

答案 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.15

  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 statuserror code,零表示它已成功完成。其他程序和脚本可以访问此代码以确定您的程序是否成功完成。

此处提供更多信息:http://en.wikipedia.org/wiki/Exit_status

答案 6 :(得分:0)

无论您是否明确指定,TC都将返回EXIT_SUCCESS