我在头文件中使用了一段时间的保护,我理解为什么使用它们的唯一原因是在编译时启用单个包含(头文件有考虑中的保护)。
我想知道是否还有其他原因使用标头保护,为什么它们不在 .c 文件中使用,如果保护也用于 .c 文件会发生什么?
答。从下面的回复中收集。
通常,所有定义都进入 .c 文件,头文件(.h 文件)包括所有声明。包含 .c 文件不是一个好习惯。
为了在编译特定于翻译单元的过程中仅关联一个包含在 .c 文件中可用的声明(因此,如果有两个或多个库需要链接;即,我们有两个或更多翻译单位);标头保护有助于仅包含一次标头文件。
发生这种情况是因为预处理器阶段甚至在编译文件以获取对象(.o 扩展名)文件之前。预处理器阶段替换整个宏并包含相关数据,这允许您的 .h 文件仅包含一次。