编译器设计预处理和编译

Compiler design preprocessing and compiling

据记载here预处理器的众多工作之一是:

Inclusion of header files. These are files of declarations that can be substituted into your program.

头文件中的内容在我们的代码中使用之前是否经过了词法分析器、语法分析器或语义分析器?如果不是,编译器如何在报告 "programmer written code" 中的错误之前报告头文件中的任何错误?

没有。预处理器只是将包含的文件插入到您的代码中,然后对结果 "big blob".

进行词法分析等

实际上,预处理器可能不会创建整个 "big blob",它只是对其进行词法分析以创建可以提供给后期编译阶段的标记流。

大多数编译器会让你生成 "big blob"(gcc 使用 -E 选项)——这将创建一个文件,其中包含你的所有代码和所有包含的代码,可能还有一些额外的 "cpp added" 标记,例如原始文件中的行号等,以帮助报告错误。

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

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