Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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++ C++;Don';不包括上一标题中的包含项_C++_Include_Visual Studio 2015 - Fatal编程技术网

C++ C++;Don';不包括上一标题中的包含项

C++ C++;Don';不包括上一标题中的包含项,c++,include,visual-studio-2015,C++,Include,Visual Studio 2015,假设我有以下几点: Main.cpp #include <Windows.h> #include "B.h" ... - 在B.h中,我不需要再次包括Windows.h,因为它已经事先包括在内了。为清楚起见,我希望每个需要它的新文件都包含Windows.h。我正在使用VS2015 这能做到吗 这可以在不影响编译时间的情况下完成吗 这是否可以接受 P>我会遇到任何问题吗?如果是这样的话, < P>也许你正在寻找C++中的预处理器指令。 它们类似于: #ifndef HEADER

假设我有以下几点:

Main.cpp

#include <Windows.h>
#include "B.h"

...
-

在B.h中,我不需要再次包括Windows.h,因为它已经事先包括在内了。为清楚起见,我希望每个需要它的新文件都包含Windows.h。我正在使用VS2015

这能做到吗

这可以在不影响编译时间的情况下完成吗

这是否可以接受


<> P>我会遇到任何问题吗?如果是这样的话,

< P>也许你正在寻找C++中的预处理器指令。 它们类似于:

#ifndef HEADERFILE_H
#define HEADERFILE_H
/*Your header declarations/definitions*/
#endif
在这种预处理器技术中,您基本上会告诉编译器,它不应该多次包含相同的头。

将每个
.h
文件编译成一次性测试输出
.obj
s。这可以手动完成,也可以通过脚本在您使用的任何项目管理系统上运行

当然,必须向项目管理系统添加.h文件

可以编译为源文件的
.h
文件包含所需的所有头文件

确切的步骤——您可以遍历目录树中的每个.h,输出一个
.h.cpp
文件,将该
.h.cpp
文件添加到您不使用的项目中,然后构建该项目


ypu使用哪种语言编写此脚本取决于您擅长哪种脚本语言。

为什么要这样做?这就是include guards的用途。而且大多数编译器“理解”包含保护,甚至不会打开以前包含过的文件(我个人也会在B.h中包含Windows.h,所以你不必总是知道要使用B.h,我需要包含Windows.h)在B.h中包含Windows.h是正常的做法。为什么在需要b的地方包含windows和b是件好事?我想在b.h中包含b纯粹是出于语义/可读性的原因,而不是出于编译的目的。进一步考虑,如果存在长链的头依赖项,这可能会有很大的问题。不完全是这样,我不希望实际包含头,因为这会导致问题。我只想把include作为一种文档形式,告诉我文件中使用了什么。如果你想分发它,它还允许文件更多地独立于它自己,而不必再发送你所有的其他文件。这是一种聪明的思考方式。这还不是我想去的地方,这只是我想要的一个功能,但一点也不重要。我会记住这一点,谢谢。
#ifndef HEADERFILE_H
#define HEADERFILE_H
/*Your header declarations/definitions*/
#endif