您的位置:首页 > 大数据 > 人工智能

关于void main(void)的错误

2010-10-15 22:19 302 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: