58

main我在 C++(或 C)程序中声明函数的方式有关系吗?

4

8 回答 8

76

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

是的,这很重要。任何一个

int main(int argc, char** argv)

或者

int main()

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

void main(int argc, char** argv)

IIRC 不是并且曾经是旧 Microsoft 的 C++ 编译器附带的一种变态。

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

于 2009-03-11T23:56:08.883 回答
28

Bjarne Stroustrup说得很清楚:

定义void main()不是,也从来不是 C++,甚至也不是 C。

请参阅参考资料

于 2010-01-17T12:49:36.107 回答
13

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

于 2009-03-11T23:57:28.490 回答
9

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

简而言之,总是int

于 2009-03-11T23:56:50.647 回答
5

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

于 2009-03-12T01:01:36.090 回答
4

很久以前,我发现这个页面 (void main(void))包含“标准说它无效”论点之外的许多原因。在特定的操作系统/架构上,它可能会导致堆栈损坏或发生其他令人讨厌的事情。

于 2009-03-12T02:05:36.843 回答
3

如果您按照规范进行,那么您应该始终声明main返回一个int.

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

于 2009-03-12T00:04:06.650 回答
2

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

5.1.2.2.1 程序启动

程序启动时调用的函数名为 main。实现没有声明这个函数的原型。它应定义为返回类型为 int 且不带参数:

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

或者带有两个参数(这里称为 argc 和 argv,尽管可以使用任何名称,因为它们是声明它们的函数的局部变量):

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

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

另请注意,void main()尽管实际上 gcc 确实会编译,但它会return 0;在遇到右大括号时进行编译。

于 2010-01-17T12:27:02.227 回答