电脑编程的基础知识——编译器和连接器 |
|
我从没见过(不过应该有)任何一本C++教材有讲过何谓编译器(Compiler)及衔接器(Linker)(倒是在很老的C教材中见过),现在都通过一个 类似VC这样的编程环境 潜藏了大量东西,将这些封装起来 。在此,对它们的 了解是十分主要的,本系列后面将大量 使用到这两个词汇,其决定了 是不是 了解如申明、定义、外部变量、头文件等十分主要的 要害 。 前面已经 注明了电脑编程便是一个“翻译”过程,要把消费者的程序翻译成CPU指令,其实也便是机器代码 。所谓的机器代码便是用CPU指令书写的程序,被称作低级语言 。而程序员的工作便是编写出机器代码 。由于机器代码 彻底是一些数字构成(CPU感知的 所有都是数字, 即便是指令,也只不过1代表加法、2代表减法这一类的数字和工作的映射),人要记住1是代表加法、2是代表减法将 比较 困苦,而且还要记住第3块内存中放的是圆周率,而第4块内存中放的是有效位数 。所以 创造了汇编语言,用一些符号 示意加法而不再用1了,如用ADD 示意加法等 。 由于 使用了汇编语言,人更方便记住了,然而电脑 无奈 了解(其只晓得1是加法,不晓得ADD是加法,由于电脑不得不看见数字),所以必须有个东西将汇编代码翻译成机器代码,也便是所谓的编译器 。即编译器是将一种语言翻译成另一种语言的程序 。 即便 使用了汇编语言,但由于其 几乎只不过将CPU指令中的数字映射成符号以协助记忆而已,还是 使用的电脑的思量 模式进行思量的,不够接近人类的思量习惯,故而浮现了 纷纷复杂的各种电脑编程语言,如:PASCAL、BASIC、C等,其被称作高级语言,由于 比较接近人的思量模式(尤其C++的类的概念的推出),而汇编语言则被称作低级语言(C曾被称作高级的低级语言),由于它们不是很 相符人类的思量模式,人类书写起来 比较 困苦 。由于CPU同样不 意识这些PASCAL、BASIC等语言定义的符号,所以也和样必须有一个编译器把这些语言编写的代码转成机器代码 。关于这里将要讲到的C++语言,则是C++语言编译器(以后的编译器均指C++语言编译器) 。 因此,这里所谓的编译器便是将我们书写的C++源代码转换成机器代码 。由于编译器执行一个转换过程,所以其 可以对我们编写的代码进行一些优化,也便是说其相当于是一个CPU指令程序员,将我们提供的程序翻译成机器代码,不过它的工作要 方便一些了,由于从人类的思量 模式转成电脑的思量 模式这一过程已经由程序员 实现了,而编译器只不过进行翻译罢了(最多进行一些优化) 。 还有一种编译器被称作翻译器(Translator),其和编译器的区别便是其是动态的而编译器是静态的 。如前面的BASIC的编译器在早期版本就被称为翻译器,由于其是在运行 时代即时进行翻译工作的,而不像编译器一次性将全部代码翻成机器代码 。关于这里的“动态”、“静态”和“运行 时代”等名词,不用刻意去 了解它,随着后续文章的浏览就会了解了 。 编译器把编译后(即翻译好的)的代码以 定然 格局(关于VC,便是COFF通用对象文件 格局, 扩大名为.obj) 存放在文件中, 而后再由衔接器将编译好的机器代码按 定然 格局在Windows操作系统下便是Portable Executable File Format--PE文件 格局)存储在文件中,以便以后操作系统执行程序时能依照那个 格局找到应该执行的第一条指令或 其余东西,如资源等 。至于为何之间还要加一个衔接器以及其它细节,在后续文章中将会进一步 注明 。 |