计算机二级考试C语言辅导:帮你彻底搞清main()返回值问题

计算机二级考试C语言辅导:帮你彻底搞清main()返回值问题,第1张

计算机二级考试C语言辅导:帮你彻底搞清main()返回值问题,第2张

现在考试编辑就和大家讨论一下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()
{…
return 0;}会正常结束。
如果使用void main(),虽然也可以结束,但似乎存在一个潜在的问题。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级考试C语言辅导:帮你彻底搞清main()返回值问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情