在编译期间,未包含在目标中的.h文件会发生什么情况

What happens to a .h file that is not included in a target during compilation?

本文关键字:文件 什么情况 目标 编译 包含      更新时间:2023-10-16

我有一个"Common.h"文件,其中存储了整个项目中重用的所有字符串。

namespace Common{
    static const std::string mystring = "IamAwesum";
}

所以在任何需要特定字符串的文件中我都包含file:

include "Common.h"

然后在需要字符串的地方使用:

Common::mystring

现在我注意到在Xcode中,没有一个"。h"文件包含在目标中。但看起来我的程序像预期的那样运行良好。有人能解释一下。h文件会发生什么吗?这是如何工作的呢?是因为"include"Common.h"的文件有所有数据的副本吗?

头文件不被编译(预编译的头文件是例外,这是一种常见的构建优化技术,而且是错误的),而是像OP怀疑的那样被复制到使用它们的文件中。

从<<p> strong> (cpp。在c++标准 中包含[/strong>

形式为

的预处理指令"q-char-sequence"

# include 新行

将导致该指令被由"分隔符"之间的指定序列标识的源文件的整个内容所替换。

包含的文件被粘贴到#include指令所在的编译文件中,取代#include指令。

因此,如果一个文件不包含,则它永远不会被替换到正在编译的文件中,并且该文件绝对不会发生任何变化。

包含的文件不需要在项目、目标makefile或其他任何地方列出。文件的包含严格地取决于执行包含的cpp文件,尽管通常会提供一个查找包含头文件的位置列表,以便从源代码中抽象出工具链和库。