8.3编译器负责转换源代码
能够把C 语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器将 C语言编写的源代码转换成本地代码的编译器称为 C 编译器。
编译器首先读入代码的内容,然后再把源代码转换成本地代码编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应表是无法生成本地代码的。读入的源代码还要经过语法解析句法解析、语义解析等,才能生成本地代码。
根据 CPU类型的不同,本地代码的类型也不同。因而,编译器不仅和编程语言的种类有关,和 CPU 的类型也是相关的。例如,Pentium等x86 系列 CPU用的C编译器,同PowerPC 这种CPU用的C编译器就不同。因为这样一来,同样的源代码就可以翻译成适用于不同 CPU 的本地代码了(图 8-5)。
因为编译器本身也是程序的一种,所以也需要运行环境。例如.有 Windows 用的C编译器、Linux 用的 C编译器等。此外,还有一种交叉编译器,它生成的是和运行环境中的CPU不同的 CPU 所使用的本地代码。例如,在 Pentium 系列 CPU的 Windows 这一运行环境下也可以作成 SH及MIPS等CPU 用的 Windows CE程序,而这就是通过使用交叉编译器来实现的。
读到这里大家可能稍微有一些混乱,不妨让我们来梳理一下。大家在计算机软件商店等处购买编译器时,可能会跟店员说明3 点:“想要买的是何种编程语言用的编译器”“编译器生成的本地代码是用于哪种 CPU的”以及“该编译器是在什么环境下使用的”(图8-6)。而实际上,通常只要说明产品名及版本就可以了。