[英]Why does int main() {} compile?
(我正在使用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 ++中的一个错误吗?
3.6.1主要功能
....
2实现不应预定义
main
功能。 此功能不应过载。 它应该具有int
类型的返回类型,否则其类型是实现定义的。 所有实现都应允许以下两个主要定义:int main() { /* ... */ }
和
int main(int argc, char* argv[]) { /* ... */ }
....并继续添加......
5
main
中的return
语句具有离开main函数(销毁具有自动存储持续时间的任何对象)的效果,并以返回值作为参数调用exit
。 如果控制到达main
的末尾而没有遇到return语句,则效果是执行return 0 ;
试图找到C ++标准的在线副本,所以我可以引用这篇文章, 我发现一篇博文,比我能更好地引用所有正确的位。
这是C ++语言标准的一部分。 如果main中没有显式的return语句,则会为您生成隐式返回0。
我很确定VC ++只是在主函数中不包含一个返回0。 功能也会发生同样的事情,但在这些情况下,至少你会收到警告。
第6.6.3 / 2节规定 - “从函数末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。”
一个例子是下面的代码,最好在VS 2010 / g ++上发出警告
int f(){
if(0){
if(1)
return true;
}
}
int main(){
f();
}
所以重点是“主要”是特别的,正如先前的回应所指出的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.