编译、生成、调试和运行有什么区别

小编 965

编译、生成、调试和运行有本质的区别:编译是把源文件转化为目标文件,依赖于编译器;生成指的是连接的过程,依赖于链接器;调试是指程序在系统中运行之前的查错和改错,依赖于调试器;运行则依赖于系统,是指程序在系统中的运行。

1.编译是什么

编译是将源码转化成目标文件,如.obj文件,rc文件等,依赖于编译器。换句话理解就是:把人能看懂,但机器看不懂的源代码,翻译成人看不懂但机器能看懂的二进制文件。编译过程对于C/C++来说,一般有预处理,编译生成中间文件,链接这三个大过程。

2.生成是什么

生成指的是链接的过程,英文是build,依赖于链接器。vc中在这一阶段将所有的目标文件和所有需要用到的组件组合成一个整体,例如:需要生成的是windows系统下的PE可执行文件,链接器会依照特定格式将目标文件组合,最后生成PE格式的,exe或dll文件。

3.调试是什么

调试是程序在系统中运行之前的查错和改错,依赖于调试器。所有或部分代码编写完成后,让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在问题。

4.运行是什么

运行是指运行生成的程序,依赖于系统,与调试阶段不同,是让程序在系统中运行。

延伸阅读

编译型语言和解释型语言有什么不同

编译型语言要求由编译器提前将源代码一次性转换成二进制指令,即生成一个可执行程序,后续的执行无需重新编译。比如我们常见的C、Golang等,优点是执行效率高;缺点是可执行程序不能跨平台,因为不同的操作系统对不同的可执行文件的内部结构要求不同;另外,由于不同操作系统支持的函数等也可能不同,所以部分源代码也不能跨平台。

而解释型语言不需要提前编译,程序只在运行时才由解释器翻译成机器码,每执行依次就要翻译一次。比如我们常见的Python、PHP 等,优点是较方便(对编写用户而言,省去了编译的步骤),实时性高(每次修改代码后都可直接运行),能跨平台;缺点是效率低。

还有一类比较特殊,混合了两种方式,可以称为:半编译半解释型语言。针对这类语言,其源代码需要先编译成一种中间文件(字节码文件),然后再将中间文件拿到虚拟机中解释执行。比如,我们常见的Java、C#等。

回复

我来回复
  • 暂无回复内容

站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部