在x86+windows环境下,或许许多处理器和操作系统环境这样写,都没有问题。
虽然我一直知道,
int main(void) {
return 0;
}
int main(int argc,char**argv)
{
return 0;
}
这种写法是c99标准里面规定的。
但我不知道为什么会是这样。
所以经常也时常写成void main(void)
但是从可移植性的角度,和编译器的角度来看的话。
返回一个int型别的值,在很多方面是有好处。
写成上面两种形式是有原因的:
1.标准是这么规定的。
2.因为呼叫main()函数的环境启动例程(start routine)已经假设了这样一种情况:返回值会被压入栈内。如果main()没有做这件事情,
然后这会导致stack corruption 在程序退出的代码序列里面,而且会导致程序崩溃。
3.因为你那样做,会在你的调用环境里面返回一个随机的值。这样是很糟糕的,因为如果someone 想要检查你的程序是否运行失败,或者从mkefile里面调用你的程序,但他们并不能保证这样一个事实:返回的非零值表明program failed(程序没能正常结束).
但在http://users.aber.ac.uk/auj/voidmain.shtml上给出了一种出错的例子。
在 RISC OS is the native operating system of Acorn's range of ARM based computers环境下,
void main(void)产生了错误。至于是怎么个情况,还有待细究。详见http://users.aber.ac.uk/auj/voidmain.shtml