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

15cff1bb0b12d3e15c2d1b91e2ef36da.png

现在考试大编辑和大家一起讨论main()函数的返回值,

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

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

但大家的讨论都只留于表面,现在考试大编辑来试着讲解一下深层含义!若有不当之处,望高手们不吝赐教

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

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

DOS中有一个程序command.com,这个程序在DOS中称为命令解释器,也就是DOS系统的shell.

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

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

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

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

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

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

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

{……

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

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

2829f2ca24f0d0090cbba57f30759f23.png

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

下载Word文档到电脑,方便收藏和打印[全文共824字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值