2015-12-21 55 views
0

说我有以下几点:c + +不包括从以前的标题包括

Main.cpp 

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

... 

-

B.h 

... 
SomePrototypeFunctionNeedingWindowsH(); 

-

在波黑,我不要求包括视窗。因为它已经被预先包含在内。为了清楚起见,我希望被要求为每个需要它的新文件包含Windows.h。我正在使用VS2015。

可以这样做吗?

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

这会被认为是一种可接受的做法吗?

如果这样做了,我会遇到任何问题吗?

+1

你为什么要这么做? – meneldal

+0

这是包含警卫的用途。而大多数编译器“理解”包括守卫,如果之前已经包含文件,甚至不打开文件。 –

+0

(我个人也会在B.h中包含Windows.h,这样你不必总是知道使用B.h,我需要包含Windows.h) –

回答

0

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

当然,有些东西需要将.h文件添加到项目管理系统。

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

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

ypu写什么语言取决于你擅长的脚本语言。

+0

这是一个很好的思考方式。这还不是我愿意去的程度,这只是我想要的一个功能,但并不重要。我会记住这一点,谢谢。 –

2

也许你正在寻找C++中的预处理指令。 他们是这样的:

#ifndef HEADERFILE_H 
#define HEADERFILE_H 
/*Your header declarations/definitions*/ 
#endif 

在这种预处理技术,你基本上是告诉你的编译器,它不应该包括多次相同的标题。 Refer to this post for more thorough understanding

+0

不完全,我不希望头被实际包括在内,因为这会导致问题。我只想把那里的include作为一种文档形式来告诉我文件中使用了什么。如果您想分发文件,它也允许文件独立于它自己的位置,而不必发送其他所有文件。 –