void main和int main之间的区别?

我声明C ++程序的方式是否重要?

区别在于一个是定义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

Bjarne Stroustrups很清楚地说明了这一点:

“定义void main()不是,也从来不是C ++,也不是C”。

http://www.stroustrup.com/bs_faq2.html#void-main

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

对于C ++,只允许int。 对C来说,C99表示只允许int。 先前的标准允许无效返回。

总之,总是int。

重点是,C程序(和C ++相同)总是(应该?)返回成功值或错误代码,所以它们应该这样声明。

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

5.1.2.2.1程序启动

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

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

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

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

或同等学历; 或者以某种其他实现定义的方式

另外请注意,gcc编译void main()虽然实际上它return 0; 遇到一个右大括号。

如果你按规范去做,那么你应该总是将main声明为int。

但实际上,大多数编译器会让你脱离任何一个,所以真正的区别是如果你想/需要返回一个值到shell。

很久以前我发现这个页面(void main(void)) ,其中有很多理由超出了“标准认为是无效的”的说法。 在特定的操作系统/体系结构上,可能会导致堆栈损坏或发生其他肮脏的事情。