【发布时间】:2015-09-01 14:29:18
【问题描述】:
我知道这是一个常见问题,但我仍然无法完全理解它。
在从多个不同的源文件和头文件生成的C或C++程序中,当使用头保护时,每个头文件是否会在整个代码中只包含一次?
之前有人告诉我,一个头文件(带有包含保护)只会在一个翻译单元中包含一次,但在整个代码中会包含多次。这是真的吗?
如果它在整个代码中只包含一次,当一个文件希望包含它并且预处理器检测到它已经被包含时,希望使用它的那个文件如何知道它在之前包含的代码中的下落?
【问题讨论】:
-
“一个头文件(带有包含保护)只会在一个翻译单元中包含一次,但在整个代码中会包含多次。这是真的吗?” 是的。不是每个程序一次,而是(最多)每个翻译单元一次。
-
使用包含守卫,即使在一个翻译单元中,标题仍然可以包含多次 - 但大部分(守卫中的部分)将在第一次之后被跳过。预处理器不关心它以前包含在哪里......只关心是否已经定义了守卫的宏(如果守卫设置正确,第一次包含它时会发生这种情况)。
-
@Engineer999:如果回答有帮助,请不要忘记接受。这就是这个网站的运作方式。
-
@MichaelGaskill 我认为从问题和答案的详细程度来看应该很明显,这不是重复的。
标签: c++ c c-preprocessor header-files