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

aja*_*ani 20 c++ turbo-c++

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

Ker*_* SB 42

在C++中,在C99和C11中,如果控制流到达main函数的末尾,则该语言的特殊规则是函数impliclty返回0.

  • @ H2CO3不,不是 (17认同)
  • @evilruff你说的有意义,但我宁愿允许`void main()`(并将运行时"转换"为`int main()`返回0)而不是对返回规则有这个奇怪的异常.但也许那只是我. (15认同)
  • 让我们面对现实.从main()返回主要有一个含义然后应用程序打算从批处理/脚本/依赖返回代码的任何其他东西运行.编写此类应用程序/实用程序的人都知道这一点,我不认为这有什么问题,但是谁在地球上关心我从Microsoft Word或Visual Studio返回的代码..好的,我知道并且我同意这是一个很好的代码练习,但我不认为这是你能做的最糟糕的事情.. (14认同)
  • @ H2CO3"在main()中依赖于此的人将在其他函数中执行相同的操作." 当然不!我可以用另一种方式来论证:谁不必要地返回"0"就可能缺乏线索,所以他们很可能会失去一个功能的结束.他们可能也写了500行的函数:) (7认同)
  • 这是一个意见问题,但我在这里与@ H2CO3.IMO对通常规则的这种例外是完全没有根据的,而且作为任何无用的规则,我发现它比其他任何事情更令人痛苦. (7认同)
  • @ H2CO3怎么可怕? (5认同)
  • @nijansen,任何拒绝编译而不从`main`返回内容的编译器都不是很好...... (5认同)
  • @ H2CO3`main`与任何其他函数都不一样(它必须返回并且`int`并且至少有两个可能的参数列表签名但是你不能重载它,你不能从代码中明确地调用它,你可以不要拿它的地址......)每个"体面的"C++程序员都应该知道(或学习)它是特殊的.(现在,"真实"代码经常在失败的情况下从"main"返回错误代码(非零),因此在非失败的情况下显式返回零只是"自然".) (4认同)
  • @NoIdeaForName好吧,我讨厌当一个人让这个功能掉下来的时候.在`main()`中依赖于它的人将在其他函数中执行相同的操作. (3认同)
  • IMO你真的不应该依赖于此; 如果你没有从非void函数返回任何东西,很多编译器会发出警告,我真的很想用`-Wall -Werror`标志进行编译,所以编译会因为这个无用的异常而失败... (2认同)

bil*_*llz 26

在C++和C99/C11中,main函数中没有return语句,默认返回0 ;

§3.6.1主要功能

main中的return语句具有离开main函数(销毁具有自动存储持续时间的任何对象)并以返回值作为参数调用std :: exit的效果.如果控制到达main的末尾而没有遇到return语句,则效果是执行return 0;

还阅读了维基页面 C/C++的主要功能

如果程序员没有定义返回值,则隐式返回0; 在main()函数的末尾由编译器插入; C++标准需要此行为.


Yu *_*Hao 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;
Run Code Online (Sandbox Code Playgroud)

请注意,对于C,仅在C99及更高版本中支持此功能,但C89不支持此功能.