gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:18 24 4
gpt4 key购买 nike

我有一个“Common.h”文件,其中存储了在我的项目中重复使用的所有字符串。

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

因此,在任何需要特定字符串的文件中,我都会包含该文件:

include "Common.h"

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

Common::mystring

现在我在 Xcode 中注意到,目标中没有包含任何“.h”文件。但似乎我的程序按预期运行良好。有人可以解释 .h 文件会发生什么吗?这是如何运作的 ?是因为“包含”“Common.h”的文件拥有所有数据的拷贝吗?

最佳答案

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

来自 C++ 标准中的 [cpp.include]

A preprocessing directive of the form

# include " q-char-sequence" new-line

causes the replacement of that directive by the entire contents of the source file identified by the specified sequence between the " delimiters.

包含的文件被粘贴到#include指令所在的正在编译的文件中,替换了#include

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

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

关于c++ - 编译期间未包含在目标中的 .h 文件会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40354900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com