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

时间:2008-08-22 12:49:37

标签: c++ return-value main

(我正在使用Visual C ++ 2008)我一直听说main()是必需的来返回一个整数,但在这里我没有放入return 0;和它编译0错误和0警告!在调试窗口中,它表示程序已经退出代码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 ++中的错误吗?

4 个答案:

答案 0 :(得分:71)

  

3.6.1主要功能

     

...

     

2实现不应预定义main函数。此功能不应过载。它应具有类型int的返回类型,否则其类型是实现定义的。所有实现都应允许以下两个主要定义:

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

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

....它继续添加......

     

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

试图找到C ++标准的在线副本,以便引用这段I found a blog post that quotes all the right bits better than I could.

答案 1 :(得分:17)

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

答案 2 :(得分:3)

我很确定VC ++只是在主函数中不包含一个返回0。功能也会发生同样的事情,但在这种情况下,至少你会收到警告。

答案 3 :(得分:1)

6.6.3 / 2节 - “离开函数的末尾等同于没有值的返回;这会导致值返回函数中的未定义行为。”。

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

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

int main(){
   f();
}

所以重点是'主'是特殊的,正如之前的回答所指出的那样。