首页 > 解决方案 > 编译器设计预处理和编译

问题描述

这里写道,预处理器的众多工作之一是:

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

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

标签: compilationcompiler-constructionpreprocessorlexical-analysissemantic-analysis

解决方案


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

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

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

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


推荐阅读