我声明我的C ++程序的方式有关系吗?
答案 0 :(得分:68)
区别在于一个是定义main
的正确方法,另一个不是。
是的,这很重要。任
int main(int argc, char** argv)
或
int main()
是根据C ++规范main
的正确定义。
void main(int argc, char** argv)
不是,也就是IIRC,是旧的微软C ++编译器带来的堕落。
答案 1 :(得分:24)
答案 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))除了“标准说无效”之外还包含许多原因。在特定的操作系统/体系结构上,它可能导致堆栈损坏和/或其他令人讨厌的事情发生。