为什么int main(){}编译?

(我正在使用Visual C ++ 2008)我一直听说main()是需要返回一个整数,但在这里我没有把return 0; 并编译了0个错误和0个警告! 在debugging窗口中,它表示程序已经退出了代码0.如果这个函数被命名为main()以外的任何东西,编译器会抱怨说'blah'必须返回一个值。 坚持return; 也会导致错误出现。 但完全没有,它编译得很好。

 #include <iostream> using namespace std; int main() { cout << "Hey look I'm supposed to return an int but I'm not gonna!\n"; } 

这可能是一个在VC + +的错误?

3.6.1主要function

….

2实现不应该预定义main函数。 该function不得超载。 它应该有一个types为int的返回types,否则它的types是实现定义的。 所有的实现都应该允许main的以下两个定义:

 int main() { /* ... */ } 

 int main(int argc, char* argv[]) { /* ... */ } 

….并继续添加…

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

试图find一个C ++标准的在线副本,所以我可以引用这段话, 我发现一篇博客文章引用所有正确的位比我能。

这是C ++语言标准的一部分。 如果在main中没有显式的return语句,则会为您生成一个隐式返回值0。

我很确定VC ++只是插入一个返回0,如果你不包括一个主函数。 同样的事情也可能发生在function上,但在这种情况下,至less你会得到一个警告。

第6.6.3 / 2节说明:“从函数末尾stream出等价于没有值的返回;这会导致返回值函数中出现未定义的行为。”

一个例子是下面的代码,最好在VS 2010 / g ++上给出警告

 int f(){ if(0){ if(1) return true; } } int main(){ f(); } 

所以,总的来说,正如前面的答复所指出的,“主”是特殊的。