void main和int main之间的区别?

时间:2009-03-11 23:53:50

标签: c++ standards

我声明我的C ++程序的方式有关系吗?

8 个答案:

答案 0 :(得分:68)

区别在于一个是定义main的正确方法,另一个不是。

是的,这很重要。任

int main(int argc, char** argv)

int main()

是根据C ++规范main的正确定义。

void main(int argc, char** argv)

不是,也就是IIRC,是旧的微软C ++编译器带来的堕落。

https://isocpp.org/wiki/faq/newbie#main-returns-int

答案 1 :(得分:24)

Bjarne Stroustrup说得很清楚:

  

定义void main()不是,也不是C ++,也不是C。

请参阅reference

答案 2 :(得分:12)

您应该使用int main。 C和C ++标准都指定main应该返回一个值。

答案 3 :(得分:9)

对于C ++,只允许使用int。对于C,C99表示只允许使用int。先前的标准允许void返回。

简而言之,始终int

答案 4 :(得分:4)

关键是,C程序(和C ++相同)总是(应该?)返回成功值或错误代码,因此它们应该以这种方式声明。

答案 5 :(得分:3)

在C ++中,main()必须返回int。但是,C99允许main()具有非int返回类型。以下是C99标准的摘录。

5.1.2.2.1程序启动

程序启动时调用的函数名为main。实施宣布否 这个功能的原型。它应该使用返回类型int和no来定义 参数:

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

或有两个参数(这里称为argc和argv,但任何名称都可以 使用,因为它们是声明它们的函数的本地函数):

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

或同等学历; 或以其他一些实现定义的方式

另请注意,gcc会编译void main(),但实际上,遇到结束括号时它会return 0;

答案 6 :(得分:2)

如果您按照规范进行操作,则应始终声明main返回int

实际上,大多数编译器都会让你逃脱任何一个,所以真正的区别在于你是否需要/需要将值返回给shell。

答案 7 :(得分:2)

很久以前我发现this page (void main(void))除了“标准说无效”之外还包含许多原因。在特定的操作系统/体系结构上,它可能导致堆栈损坏和/或其他令人讨厌的事情发生。