定义
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是程序将值返回给调用它的“系统”的一种方法。在不提供这类工具的系统上,返回值将被忽略,但这不会使“voidmain()”合法C+或Legal C。即使您的编译器接受“voidmain()”,也要避免它,否则C和C+程序员可能会认为它是无知的。
在C+中,main()不需要包含显式返回语句。在这种情况下,返回的值为0,意味着成功执行。例如:
#include<iostream> int main() { std::cout<<"hello world"; }
还请注意,ISO C+和C99都不允许您将该类型排除在声明之外。也就是说,与C89和ARM C+不同,在声明中缺少类型时,不假定“int”。因此:
#include <iostream> main() { /* ... */ }
是一个错误,因为main()的返回类型丢失了。
资料来源:http://www.stroustrup.com/bs_faq2.html#void-main
综上所述,使用“voidmain()”或仅仅使用“main()”从来都不是一个好主意,因为它不确定标准。不过,一些编译器可能允许这样做。