void main和int main之间的区别?
我声明C ++程序的方式是否重要?
区别在于一个是定义main
的正确方法,另一个不是。
是的,这很重要。
int main(int argc, char** argv)
要么
int main()
是每个C ++规范的main
定义。
void main(int argc, char** argv)
不是,IIRC,是微软C ++编译器带来的一种变态。
Bjarne Stroustrups很清楚地说明了这一点:
“定义void main()
不是,也从来不是C ++,也不是C”。
你应该使用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)) ,其中有很多理由超出了“标准认为是无效的”的说法。 在特定的操作系统/体系结构上,可能会导致堆栈损坏或发生其他肮脏的事情。