编译器设计的预处理和编译

时间:2019-04-09 06:23:16

标签: compilation compiler-construction preprocessor lexical-analysis semantic-analysis

here写道,预处理器的许多工作之一是:

  

包含头文件。这些是可以替换为程序的声明文件。

在我们的代码中使用头文件中的内容之前,它们是否先经过词法分析器,语法分析器或语义分析器?如果不是,编译器在报告“程序员书面代码”中的错误之前如何报告头文件中的任何错误?

2 个答案:

答案 0 :(得分:1)

不。预处理器只是将包含的文件插入您的代码中,然后对生成的“大斑点”进行词法分析等。

实际上,预处理器可能不会创建整个“大blob”,而只是对其进行词法分析以创建令牌流,这些令牌流可被馈送到以后的编译阶段。

大多数编译器将允许您生成“大blob”(gcc使用-E选项)-这将创建一个文件,其中包含您的所有代码和所有包含的代码以及可能的一些“ cpp添加”标记,例如原始文件等以帮助进行错误报告。

首先出现包含文件中的错误的原因是因为编译器首先遇到它们。

答案 1 :(得分:0)

预处理器还将解释预处理器指令,以确定要包括的文件以及该文件的哪些部分,然后传递大blob。