程序语言有两大类:像C/C++之类,是“编译型运行语言”,写出的语言代码必须经编译器编译形成.EXE可执行机器代码才能运行,运行时与你写的源代码没有联系,检验标准是你可以把那些源代码删除,只保留(或拷贝到别的裸机上)最终得到的.EXE文件,程序也能运行;像VB(旧式的BASIC)之类,是“解释性运行语言”,写出的代码在解释器上动态运行,解释器读入每条源代码指令进行理解,演化为自己能够执行的动作再去执行,是真正的逐行运行代码,检验标准是无法脱离源代码(printf()和scanf()函数,就是两个内嵌的微型解释器,它解释性地执行那些输出和读取动作,因此那些是额外的使用规则,不是C语言内部规定的,学那个不是学C语言,这个观点我说了无数次)。现代新的语言,如、Java、C++/CLR等,是伪编译型语言,介于前两者之间。
明白C/C++的运行原理,就知道如果它真的在运行了,那么必定存在其对应的.EXE文件,要么在外部存储器上,要么在内存虚拟的外部存储器上(个别IDE可以在内存模拟外部存储器,编译得到的.EXE文件不用写到物理磁盘上,避免垃圾文件太多,延长磁盘寿命。Borland公司的Turbo系列,就很喜欢使用内存存储中介文件,所以使用它们的IDE后会发现很少垃圾文件,只有必需的.OBJ和.EXE保留下来,这就是Turbo名称的来源之一,快!而微软的MSC会有很多临时文件遗留,编译速度比TC慢,但最终.EXE的性能是差不多的,其实微软的还规范一些,因为它不会采用非规范的手段去加快速度,TC系列有许多非标准特性,不知道的很容易学出坏习惯)。一般的IDE环境,都把中间和最终输出文件都写在物理磁盘上,因此总能找到.EXE文件的,除非你的程序编译失败,无法运行。
需要纠正一个很多初学者容易犯的误区:以为是编译器在运行程序。不是的,编译器只是一个翻译机器,它负责把源代码翻译为机器码,然后就没它的事了。也就是说,最终运行程序的环境,是没有编译器存在的!你的产品就是那个.EXE文件,它是独立的,一定要明白这一点。
[
本帖最后由 TonyDeng 于 2011-10-8 00:29 编辑 ]