Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译过程中未包含在目标中的.h文件会发生什么情况?_C++_Xcode - Fatal编程技术网

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

C++ 编译过程中未包含在目标中的.h文件会发生什么情况?,c++,xcode,C++,Xcode,我有一个“Common.h”文件,它存储了在我的项目中重用的所有字符串 namespace Common{ static const std::string mystring = "IamAwesum"; } 因此,在任何需要特定字符串的文件中,我都包括该文件: include "Common.h" 然后在我需要使用字符串的地方: Common::mystring 现在我注意到在Xcode中,.h文件没有一个包含在目标中。但我的程序似乎和预期的一样好。有人能解释一下.h文件发生了什

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

namespace Common{
    static const std::string mystring = "IamAwesum";
}
因此,在任何需要特定字符串的文件中,我都包括该文件:

include "Common.h"
然后在我需要使用字符串的地方:

Common::mystring
现在我注意到在Xcode中,.h文件没有一个包含在目标中。但我的程序似乎和预期的一样好。有人能解释一下.h文件发生了什么吗?这是怎么回事?是因为“包含”“Common.h”的文件包含所有数据的副本吗?

未编译标头(异常是预编译标头,这是一种常见的生成优化技术,而且是错误的),而是复制到使用它们的文件中

< > <强> > [CP]包含[<强] > C++标准

表单的预处理指令

#包括
“q-char-sequence”新行

导致用源文件的全部内容替换该指令,源文件的全部内容由“分隔符”之间的指定序列标识

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

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


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

请注意,您的在这种情况下,atic字符串是全局的。因此它们可能会在任何时候创建异常,并且无法捕获。我建议您使用返回字符串引用的函数。
std::string const&mystring{static std::string const mystring=“IamAwesum”return mystring}
通过这种方式,您的对象仅在需要时才被构造。您能解释一下,当您说他们可以随时创建异常时,您的意思是什么吗?全局构造函数是在程序开始时在main之前调用的,因此您无法处理异常。如果您想在加载库时使用全局构造函数创建库,她可以生成全局对象时ndle异常。当加载库时,它们无法处理异常。对于用户来说,这个问题可能很难找到。