C++ 想要一个关于GCC预处理器的清晰解释吗
读这篇文章时,结尾有一句话: <>历史上,许多语言编译器(包括C++和FORTRAN)已经被实现为“预处理器”,它发出另一种高级语言,如C.C++ 想要一个关于GCC预处理器的清晰解释吗,c++,c,gcc,preprocessor,C++,C,Gcc,Preprocessor,读这篇文章时,结尾有一句话: 历史上,许多语言编译器(包括C++和FORTRAN)已经被实现为“预处理器”,它发出另一种高级语言,如C. 不知道预处理器,有没有文档?这是否意味着所有这些语言都将被翻译成C源代码?否。不一定。许多C++编译器,如GCC文档所说,(但不是GCC/G++)产生C代码输出。他们为什么这样做?因此,他们可以利用C编译器可以编译到的所有后端可执行代码(X86、AMD等),通过将C作为目标代码,他们在后端节省了大量低端代码。这类编译器包括原始的Cfront和Comeau C/
不知道预处理器,有没有文档?这是否意味着所有这些语言都将被翻译成C源代码?否。不一定。许多C++编译器,如GCC文档所说,(但不是GCC/G++)产生C代码输出。他们为什么这样做?因此,他们可以利用C编译器可以编译到的所有后端可执行代码(X86、AMD等),通过将C作为目标代码,他们在后端节省了大量低端代码。这类编译器包括原始的Cfront和Comeau C/C++。现在,“预处理器”一词的含义完全不同,在这里使用起来很混乱。但是,是的,这里它意味着一些编译器将其源代码发送到另一种语言 应该叫它。其中一个例子是(Bjarne Stroustrup自己设计的),它将C++转换为C.<
<> P> > C++中的“预处理器”的正常含义,参见.P/> < P>我认为最好使用“强>源到源的译者< /强>而不是“预处理器”,这使得它在意义上是含糊不清的,但是它也没有错。 基本上,编译器是一种将源代码从高级编程语言翻译成低级语言(例如汇编语言或机器代码)的计算机程序。但问题中的文档说明: 历史上,许多语言的编译器,包括C++和FORTRAN, 已被实现为“预处理器”,它发出另一个高电平 语言,如C 根据这一描述,可以说早期的编译器是作为源到源转换器实现的。翻译器也是预处理器的一种形式,但它不同于程序中使用的预处理器 翻译器是一种计算机程序,用于翻译所编写的程序 在给定的编程语言中转换为功能等效的程序 用另一种语言 现在,来看看程序中使用的预处理器,让我们举一个例子:
#include <stdio.h>// a PREPROCESSOR directive
#包含//预处理器指令
预处理器是一个程序,它在
主编译是进行的,(类似于翻译器)但区别在于它在这里处理名称以#开头的指令
这里的#include
是一个指令。此指令使预处理器将stdio.h
文件的内容添加到
这是一个典型的预处理器操作:在源代码中添加或替换文本
在编译之前。有些语言是通过让编译器生成C代码来实现的,然后由C编译器编译。值得注意的例子包括:
- Yacc被编译成C代码。BISON可以编译成C或C++代码。
- Lex被编译成C代码。Flex可以编译成C或C++代码,我相信.<
- Informix ESQL/C将嵌入式SQL转换为纯C
- Informix 4GL将I4GL源代码转换为ESQL/C,然后使用ESQL/C编译器创建C代码(C编译器创建目标代码和可执行文件),因此它有一个多级编译器(我正在简化一点)