什么将被这个声明取代?

时间:2017-07-18 10:55:19

标签: c c-preprocessor preprocessor preprocessor-directive

声明在文件中:

#include "filename"

该文件何时被其内容替换?

  1. 编译前

  2. 编译后

  3. 执行期间

2 个答案:

答案 0 :(得分:1)

预处理在编译的其他阶段之前执行,但大多数现代编译器都将预处理阶段作为编译过程的一部分。

问题是近似的:

  • 如果您只有3个选项,预期答案可能为1。

  • 如果您可以选择以上,则您遇到麻烦,因为您无法确定问题是愚蠢的还是愚蠢的。

  • 如果这是一个面试问题,这里有机会告诉面试官您对编辑过程,解析阶段等所有了解。时间限制将在主题用尽之前达到。

答案 1 :(得分:1)

如果严格遵循C标准中的描述(不使用“汇编”一词)(5.1.1翻译环境,5.1.1.1程序结构)

  

1 C程序不需要同时翻译。的文本   程序保存在称为源文件的单元中(或预处理   文件)在本国际标准中。 与源文件一起使用   通过预处理包含的所有头文件和源文件   指令#include称为预处理转换单元。   预处理后,预处理转换单元称为a   翻译单元以前翻译的翻译单元可能是   单独保存或在图书馆保存。单独的翻译单位   程序通过(例如)调用函数进行通信   标识符具有外部链接,操纵对象   标识符具有外部链接或数据文件的操作。   翻译单元可以单独翻译,然后再链接到   制作一个可执行程序。

因此,在预处理期间但在翻译之前,所有#includes都将替换源文件。