深入学习main()返回值问题

来源:互联网 发布:带英语的网络流行语 编辑:程序博客网 时间:2024/05/20 01:09

点击打开链接


前些天在论坛看到一贴,讨论main()参数的返回value,

有的说必须有返回value,如:return 0;

有的说没有也可以,如:用void修饰main()

但大家的讨论都只留于表面,现在我来试着讲解一下深层含义!

以下观点纯属个人观点,若有不当之处,望高手们不吝赐教

要想真正理解这个问题,首先要了解一下操作Systam的外壳

操作Systam是由多个功能模块组成的庞大,复杂的软体Systam,任何通用的操作Systam,都要提供一个称为shell(外壳)的程式,用户(操作人员)使用这个程式来操作计算机Systam进行工作。

 

DOS中有一个程式Command.Com,这个程式在DOS中称为命令解释器,也就是DOSSystam的shell.

用户的命令由Command运行,首先Command把程式加入内存,然后设置CPU的CS:IP指向程式的第一条指令(也就是程式入口,在中就是main()参数),从而使程式得以运行。程式结束后,返回到Command中,CPU继续运行Command.注意在返回的时候要有一个返回value,这样才能退出程式(注意我用的是退出一词),之后各寄存器会有恢复动作,如果没有返回value,虽然表面上看程式也正常结束了,但实际上它并没有退出,各寄存器并没有恢复,如CS:IP 还是指向程式尾部,如果得到CS:IP,那么可以让程式继续运行下去,但是所运行的程式已经不是你的codes所在的那段内存空间了,它在运行其它内存中的程式。

 

在中,如果是void main()的话,理论上说,应该不会正常结束,当然,这完全是我的猜测,

因为在汇编程式中,有int 21h的话,结束后会提示 Program terminated normally,

意思是程式正常结束,然后在用T或P命令,将没有指令运行,

如果没有int 21h这一句,就不会有这个提示,也就是说程式没有正常结束,

此时用T或P命令,CS:IP将指向下一条指令,并运行。

类比一下,C++中也应该是这样,用int main()

{……

return 0;}的话会正常结束,

 

用void main()的话,虽然也能结束,但似乎会有潜在的问题。


原创粉丝点击