为什么C ++不允许我void main()
?这不是什么大问题,但我仍然很好奇。
答案 0 :(得分:11)
因为main()
的退货类型(由标准规定)必须为int
C ++ 03 [Section 3.6.1
主要功能]
实现不应预定义主函数。此功能不应过载。 它的返回类型为int ,但其类型是实现定义的。
答案 1 :(得分:9)
回答 Stroustrup 本人:
我可以写“void main()”吗? 定义
void main() { /* ... */ }
不是,也从来就不是C ++,甚至也不是C.参见ISO C ++标准3.6.1 [2]或ISO C标准5.1.2.2.1。符合要求的实施接受
int main() { /* ... */ }
和
int main(int argc, char* argv[]) { /* ... */ }
符合实现可能会提供更多版本的main(),但它们必须都具有返回类型int。 main()返回的int是程序将值返回给调用它的“系统”的一种方式。在不提供此类工具的系统上,忽略返回值,但这不会使“void main()”合法C ++或合法C.即使您的编译器接受“void main()”避免它,或冒险被C和C ++程序员认为是无知的。
在C ++中,main()不需要包含显式的return语句。在这种情况下,返回的值为0,表示执行成功。例如:
#include<iostream>
int main()
{
std::cout << "This program returns the integer value 0\n";
}
另请注意,ISO C ++和C99都不允许您将类型保留在声明之外。也就是说,与C89和ARM C ++相反,假设声明中缺少某个类型,则不假定为“int”。因此:
#include<iostream>
main() { /* ... */ }
是一个错误,因为缺少main()的返回类型。
答案 2 :(得分:4)
因为标准说它返回int。
答案 3 :(得分:1)
某些操作系统期望从进程中获得整数返回值。声明main返回一个int。如果您不关心该值,只需返回0。
来自comp.lang.c FAQ: