深入学习main()返回值问题
来源:互联网 发布:带英语的网络流行语 编辑:程序博客网 时间:2024/05/20 01:09
点击打开链接
前些天在论坛看到一贴,讨论main()参数的返回value,
有的说必须有返回value,如:return 0;
有的说没有也可以,如:用void修饰main()
但大家的讨论都只留于表面,现在我来试着讲解一下深层含义!
以下观点纯属个人观点,若有不当之处,望高手们不吝赐教
要想真正理解这个问题,首先要了解一下操作Systam的外壳
操作Systam是由多个功能模块组成的庞大,复杂的软体Systam,任何通用的操作Systam,都要提供一个称为shell(外壳)的程式,用户(操作人员)使用这个程式来操作计算机Systam进行工作。
DOS中有一个程式Command.Com,这个程式在DOS中称为命令解释器,也就是DOSSystam的shell.
用户的命令由Command运行,首先Command把程式加入内存,然后设置CPU的CS:IP指向程式的第一条指令(也就是程式入口,在中就是main()参数),从而使程式得以运行。程式结束后,返回到Command中,CPU继续运行Command.注意在返回的时候要有一个返回value,这样才能退出程式(注意我用的是退出一词),之后各寄存器会有恢复动作,如果没有返回value,虽然表面上看程式也正常结束了,但实际上它并没有退出,各寄存器并没有恢复,如CS:IP 还是指向程式尾部,如果得到CS:IP,那么可以让程式继续运行下去,但是所运行的程式已经不是你的codes所在的那段内存空间了,它在运行其它内存中的程式。
在中,如果是void main()的话,理论上说,应该不会正常结束,当然,这完全是我的猜测,
因为在汇编程式中,有int 21h的话,结束后会提示 Program terminated normally,
意思是程式正常结束,然后在用T或P命令,将没有指令运行,
如果没有int 21h这一句,就不会有这个提示,也就是说程式没有正常结束,
此时用T或P命令,CS:IP将指向下一条指令,并运行。
类比一下,C++中也应该是这样,用int main()
{……
return 0;}的话会正常结束,
用void main()的话,虽然也能结束,但似乎会有潜在的问题。
- 深入学习main()返回值问题
- main函数返回值问题
- main函数返回值问题
- 深入理解主函数main()的输入参数及返回值问题
- C语言main函数返回值问题
- c语言main()函数返回值问题
- main函数的返回值问题
- C语言学习笔记(1)main函数返回值问题
- main()的返回值
- main 返回值使用
- 深入学习main()和UIApplication
- C语言之Main函数返回值问题
- C语言之Main函数返回值问题分析
- C语言之Main函数返回值问题分析
- C语言之Main函数返回值问题分析
- C语言之Main函数返回值问题分析
- C语言之Main函数返回值问题
- Java学习笔记第十天:1_形式参数和返回值的问题深入研究
- Postgresql数据库全文索引初试【对象关系型数据库管理系统】
- ORACLE:出错 ORA-12519, TNS:no appropriate service handler found
- 第一次实习面试-fabonaci数列
- 百度App应用创新大赛参赛作品:国民教育委员会
- 非阻塞通信
- 深入学习main()返回值问题
- 如何让cmd全屏显示?
- 线程同步
- asp.net常用函数表
- 家庭和睦、人生平淡也是一种成功
- Ubuntu下用minicom搭建TQ2440的程序下载dnw环境
- 再谈Oracle like优化
- 在PHP语言中使用JSON
- uboot源码阅读(八)江湖人物go