为什么void main是愚蠢的?

a) 最直接的回答:因为标准就是这么规定的。C99第5.1.2.2.1节“Program startup”
中明确规定好了的,不服不行。当然了,您要写不可移植的C就得另说了。

b) main函数的返回值用于说明程序的退出状态。如果返回 0,则代表程序正常退出;
返回其它数字的含义则由系统决定。通常,返回非零代表程序异常退出。在Win下
你可能觉得这并不重要,但请想想Unix/Linux下面那些依靠程序“返回值”工作的
脚本和Makefile!

c) main函数被认为要返回int(main is supposed to return an int.)。调用main的
程序假设它会返回一个int,并且把它压栈。如果它没有返回,就有可能导致
程序崩溃!

d) 在Win上可行并不代表都可行,在所有i386上可行也不代表都可行。世界是丰富多彩
的,除了Window$和i386,还有很多系统和构架。这里有一个void main导致程序崩溃
的例子,是在ARM上的RISC OS中,见下:
http://users.aber.ac.uk/auj/voidmain.shtml

e) C++之父在其主页上这样评价void main:“这种定义从来没有在C++中出现过,也没在C中出现。” “一致的实现可能提供多种main的版本,但他们必须都是int返回类型。” “即使你的编译器接受void main,你也要避免它。”

所以,你不应该,更不能教别人,使用void main。如果你的老师上课时教给你写void main,你应该毫不犹豫地站起来告诉他/她:这样是不对的! 同理,任何讲C语言的书中带有void main的例子都是不严谨的!