main函数的返回值:帮你彻底搞清main()返回值问题



  前些天在论坛看到讨论()返回值
 
  有说必须有返回值如: 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 ()虽然也能结束但似乎会有潜在问题
Tags:  vb函数返回值 存储过程返回值 返回值 main函数的返回值

延伸阅读

最新评论

发表评论