阅读此document时,最后会有一句话:
从历史上看,许多语言的编译器,包括C ++和Fortran,都被实现为“预处理器”,它们会发出另一种高级语言,如C语言。
不知道预处理器,任何文件?这是否意味着所有这些语言都将被翻译成C源代码?
答案 0 :(得分:2)
我认为最好使用术语 源到源转换器 而不是“预处理器”,这使得它在含义上含糊不清,但它是'a'任何错误都可以使用它。
基本上,编译器是一种计算机程序,将源代码从高级编程语言翻译成低级语言(例如汇编语言或机器代码)。但问题中的文档说:
历史上,许多语言的编译器,包括C ++和Fortran, 已经实施作为“预处理器”,它会发出另一个高级别 语言如C.
根据此描述,可以说早些时候,编译器实现作为源到源转换器。翻译器也是预处理器的一种形式,但它与程序中使用的预处理器不同。
翻译器是一种翻译程序的计算机程序 在给定的编程语言中转换为功能等同的程序 用不同的语言。
现在,来一个程序中使用的预处理器,让我们举个例子:
#include <stdio.h>// a PREPROCESSOR directive
预处理器是一个在之前处理源文件的程序 主要编译发生,(类似于翻译者)但不同之处在于HERE它处理名称以#开头的指令。
这里#include
是一个指令。该指令使预处理器将stdio.h
文件的内容添加到您的
program.This是一个典型的预处理器操作:在源代码中添加或替换文本
在它编译之前。
答案 1 :(得分:2)
通过让编译器生成C代码然后由C编译器编译,已经实现了一些语言。值得注意的例子包括:
cfront
从C ++代码生成C代码。一旦C ++支持异常,它就不再实用了(更多信息请参阅Stroustrup The Design and Evolution of C++),但并非所有C ++编译器都使用该技术(实际上,我不知道除cfront
以外的任何其他编译器做到了。)。答案 2 :(得分:1)
短语&#34;预处理器&#34;现在有一个完全不同的含义,在这里使用起来很困惑。但是,是的,这意味着一些编译器会将其源代码发送给另一种语言。
应该称为source to source compiler。其中一个例子是Cfront(由Bjarne Stroustrup自己设计),它将C ++转换为C.
对于短语&#34;预处理器&#34;的正常含义在C ++中,请参阅here。
答案 3 :(得分:-1)
没有。不必要。许多C ++编译器,如GCC文档所说,(但不是gcc / g ++)产生C代码输出。他们为什么这样做呢?因此,他们可以搭载C编译器可以编译到的所有后端可执行代码(X86,AMD等)。通过将C作为目标代码,他们在后端节省了大量的低端编码。这些编译器包括原始的Cfront和Comeau C / C ++。