编译过程中未包含在目标中的.h文件会发生什么情况?

拉胡尔·艾耶(Rahul Iyer)

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

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

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

include "Common.h"

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

Common::mystring

现在,我在Xcode中注意到目标中没有任何“ .h”文件。但似乎我的程序按预期工作正常。有人可以解释.h文件发生什么情况吗?这是如何运作的 ?是否因为“包含”“ Common.h”的文件具有所有数据的副本?

用户名

头文件不会被编译(例外是预编译的头文件,一种常见的构建优化技术,并且会错误地将其编译),但是,由于OP怀疑,它被复制到使用它们的文件中。

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

形式的预处理指令

# include “ q字符序列”换行

导致该指令被源文件的全部内容替换,该源文件的所有内容由定界符之间的指定顺序标识。

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

因此,如果包括文件,则永远不会将其替换为正在编译的文件,并且绝对不会发生任何文件。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

genrule生成的Java文件未包含在编译过程中

如果在推送过程中忽略./.git/objects/pack/下的.pack文件,会发生什么情况?

如果在事务执行过程中终止JVM进程,会发生什么情况?

如果在更新过程中安排关机,会发生什么情况?

当我在shell中执行文件时,会发生什么情况?

如果Linux中的单个目录下文件过多,会发生什么情况?

如果从类文件中删除超级构造函数调用,会发生什么情况?

在Git中删除分支时会发生什么情况

如果我在Git中假定未更改的早期文件集上进行更改,会发生什么情况?

如果sqlproj.user文件不在源代码管理中,则在DACPAC构建/部署过程中会发生什么情况?

如果在执行过程中修改了SQL Server作业步骤,会发生什么情况

如果在UI5-清单中未更新库预加载文件/库依赖项,会发生什么情况?

如果我们在App Delegate中的didFinishLaunching中返回NO,会发生什么情况

在Java函数中创建并存储在对象中的对象会发生什么情况?

将方法作为目标执行的线程会发生什么情况

如果 LiveData 和 Room 中不存在记录,会发生什么情况?

如果不引用对象,Java中的对象会发生什么情况,例如:myString.concat(“ that”)

在Docker中运行的多进程应用程序(例如Postgres)会发生什么情况?

如果我在Spark中两次缓存相同的RDD,会发生什么情况?

如果子类未在Java中定义构造函数,会发生什么情况?

Xamarin.iOS版本中的Console.WriteLine调用会发生什么情况?

在golang中,超出循环,条件或案例范围的变量会发生什么情况?

如果我使用JNI从C的多个线程中调用Java函数,会发生什么情况?

对象Hashcode更改时,在Hashmap或Hashset中查找会发生什么情况

从C中main返回时,正在运行的线程会发生什么情况?

当您在Unity中按下“播放”按钮时,会发生什么情况?

如果保持活跃连接的数量达到Golang http传输中的MaxIdleConns,会发生什么情况

没有分区键属性的documentDb中的文档会发生什么情况?

当线程进入Java中的同步块/方法时会发生什么情况