我有一个“Common.h”文件,其中存储了在我的项目中重复使用的所有字符串。
namespace Common{
static const std::string mystring = "IamAwesum";
}
因此,在任何需要特定字符串的文件中,我都包含该文件:
include "Common.h"
然后在我需要使用字符串的地方:
Common::mystring
现在我注意到在 Xcode 中,目标中没有包含任何“.h”文件。但看来我的程序按预期运行良好。有人可以解释 .h 文件会发生什么吗?这是如何运作的 ?是因为“包含”“Common.h”的文件具有所有数据的副本吗?
标头不会被编译(预编译标头除外,这是一种常见的构建优化技术,并且是错误的),而是如OP怀疑的那样,被复制到使用它们的文件中。
From [cpp.include]在 C++ 标准中
表单的预处理指令
# include
“q-字符序列”新队
导致将该指令替换为由 " 分隔符之间的指定序列标识的源文件的全部内容。
包含的文件将粘贴到正在编译的文件中,其中#include
指令是,替换#include
.
所以如果一个文件是not包括在内,它永远不会被替换到正在编译的文件中,并且文件绝对不会发生任何变化。
包含的文件不需要在项目、目标 makefile 或您拥有的任何内容中的任何位置列出。文件的包含严格取决于执行包含操作的 cpp 文件,尽管通常会出现一个查找包含头文件的位置列表,以从源代码中抽象出工具链和库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)