计算机二级:深入讲解main()返回值问题

计算机二级:深入讲解main()返回值问题,第1张

计算机二级:深入讲解main()返回值问题,第2张

考试编辑推荐:计算机二级C语言辅导知识

前几天在论坛看到一个帖子讨论main()函数的返回值。


有人说一定要有返回值,比如:return 0;;

有的可以说不是,比如:用void修改main()。

但是大家的讨论都只是表面的。现在我来试着解释一下深层含义!

以下观点纯属个人观点。如有不当之处,请不吝赐教。

要真正理解这个问题,首先要了解操作系统的外壳。

操作系统是由多个功能模块组成的庞大而复杂的软件系统。任何通用操作系统都必须提供一个叫做shell的程序,用户(操作员)用它来操作计算机系统工作。

DOS里有一个程序command.com,在DOS里叫命令解释器,也就是DOS系统的外壳。

用户的命令是通过命令执行的。首先Command将程序添加到内存中,然后设置CPU的CS: IP指向程序的第一条指令(也就是程序入口,在C++中是main()函数),这样程序就可以运行了。程序完成后,返回命令,CPU继续运行命令。返回时注意一个返回值,这样就可以安全退出程序(注意我用的是exit这个词)。之后,每个寄存器都会有一个恢复动作。如果没有返回值,虽然表面上程序正常结束,但实际上并没有退出,各个寄存器也没有恢复,比如CS: IP仍然指向程序的结尾。如果你得到CS: IP,你可以让程序继续执行,但是执行的程序已经不在你的代码所在的内存空中了,它在执行其他内存中的程序。

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

因为在汇编程序中,如果有int 21h,结束后会提示程序正常终止。

意味着程序正常结束,然后使用T或P命令,不会执行任何指令。

没有语句int 21h,就不会有这样的提示,说明程序没有正常结束,

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

以此类推,在C++中应该也是一样,使用int main()

{……

返回0;}会正常结束,

用void main(),虽然也可以结束,但似乎存在一个潜在的问题。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级:深入讲解main()返回值问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情