是不是所有的编译器都用 exit 来返回 main 的返回值我是不太清楚。但是标准规了,main 的 return (N) 语句的效果必须与 exit(N) 等价。所以我觉得简明的实现就是应该用 exit 来返回。
只是说不管声明成 int 还是 void,main 在逻辑上都应该有个返回值。所以声明成 int 更合理。
上次争论这个 void main 的问题就我和你。我也不是太反对这个 void main 的事。但是就我所知确实只有 MS 的编译器这么搞,很多其它的编译器写 void 是会给警告或者错误的。这可能是导致每次一提这个 void main 的时候总拿微软说事后原因。
微软很久以前不太喜欢遵循标准,其目的很有可能是为了垄断。但现在的微软变化还是很大的,对标准上的事,也做的比较努力了。在很多方面,我现在并不抵触微软。
我不抵触这个 void main 至少还有另一个原因。
在谈论 C 语言的时候,标准确实规定合法的 main 只有那两种形式。但是事实上在 C++ (2003年标准) 里并不是这么规定的,它只是说编译器必须支持这两种形式的 main 函数,而其它形式的 main 函数行为是未明确。
历史遗留和向后兼容问题,始终都是阻碍程序设计前进的难题。这不仅对微软,对所有的开发者都一样。