前些天在论坛看到贴讨论()返回值
有说必须有返回值如: 0;
有说没有也可以如:用void修饰()
但大家讨论都只留于表面现在我来试着讲解下深层含义!
以下观点纯属个人观点若有不当的处望高手们不吝赐教
要想真正理解这个问题首先要了解下操作系统外壳
操作系统是由多个功能模块组成庞大复杂软件Software系统任何通用操作系统都要提供个称为shell(外壳)用户(操作人员)使用这个来操作计算机系统进行工作
DOS中有个command.com这个在DOS中称为命令解释器也就是DOS系统shell.
用户命令由command执行首先command把加入内存然后设置CPUCS:IP指向第条指令(也就是入口在C中就是())从而使得以运行结束后返回到command中CPU继续运行command.注意在返回时候要有个返回值这样才能安全退出(注意我用是退出词)的后各寄存器会有恢复动作如果没有返回值虽然表面上看也正常结束了但实际上它并没有退出各寄存器并没有恢复如CS:IP 还是指向尾部如果得到CS:IP那么可以让继续执行下去但是所执行已经不是你代码所在那段内存空间了它在执行其它内存中
在C中如果是void ()话理论上说应该不会正常结束当然这完全是我猜测
在汇编中有 21h话结束后会提示 Program terminated normally
意思是正常结束然后在用T或P命令将没有指令执行
如果没有 21h这句就不会有这个提示也就是说没有正常结束
此时用T或P命令CS:IP将指向下条指令并执行
类比下C中也应该是这样用 ()
{……
0;}话会正常结束
用void ()话虽然也能结束但似乎会有潜在问题
最新评论