在阅读这份文件的时候,在它的最后,有一句话:
从历史上看,包括 C++ 和 Fortran 在内的许多语言的编译器都被实现为“预处理器”,它发出另一种高级语言,如 C。
对预处理器一无所知,有任何文件吗?这是否意味着所有这些语言都将被翻译成 C 源代码?
在阅读这份文件的时候,在它的最后,有一句话:
从历史上看,包括 C++ 和 Fortran 在内的许多语言的编译器都被实现为“预处理器”,它发出另一种高级语言,如 C。
对预处理器一无所知,有任何文件吗?这是否意味着所有这些语言都将被翻译成 C 源代码?
我认为使用术语 源到源翻译器而不是“预处理器”会更好,这使得它在含义上模棱两可,但使用它也没有任何错误。
基本上,编译器是将源代码从高级编程语言转换为低级语言(例如汇编语言或机器代码)的计算机程序。但是问题中的文档说:
从历史上看,许多语言的编译器,包括 C++ 和 Fortran,都被实现为“<strong>预处理器”,它发出另一种高级语言,如 C。
根据这个描述,可以说,早先,编译器是作为源到源翻译器实现的。翻译器也是预处理器的一种形式,但它不同于程序中使用的预处理器。
翻译器是一种计算机程序,它将以给定编程语言编写的程序翻译成另一种语言的功能等效程序。
现在,来到 程序中使用的预处理器,让我们举个例子:
#include <stdio.h>// a PREPROCESSOR directive
预处理器是在主编译发生之前处理源文件的程序(类似于翻译器),但区别在于 HERE 它处理名称以 # 开头的指令。
这#include
是一个指令。该指令使预处理器将stdio.h
文件的内容添加到您的程序中。这是一个典型的预处理器操作:在源代码编译之前添加或替换文本。
有些语言是通过让编译器生成 C 代码来实现的,然后由 C 编译器编译。值得注意的例子包括:
cfront
从 C++ 代码生成 C 代码。一旦 C++ 支持异常(有关更多信息,请阅读 Stroustrup The Design and Evolution of C++ ),它就不再实用,但并非所有 C++ 编译器都使用该技术(事实上,我不知道除此之外的任何其他编译器cfront
)。不,不一定。许多 C++ 编译器,如 GCC 文档所述,(但不是 gcc/g++)产生 C 代码输出。他们为什么这样做呢?因此,他们可以搭载 C 编译器可以编译到的所有后端可执行代码(X86、AMD 等)。通过将 C 作为目标代码,他们可以在后端节省大量低端编码。此类编译器包括原始的 Cfront 和 Comeau C/C++。