2009-08-24 100 views
5

如果我把一个头(AH)到stdafx.h中和头包括未在stdafx.h中提到的另一头(BH),将BH可以在每次有人访问包括AH或它是作为一部分编译的啊?如果它被编译到a.h中,当有人直接包含b.h时会发生什么?这是预编译还是不?问题在Visual C++预编译头

我的问这个问题的动机是我试图优化stdafx.h中的文件为我工作,对软件的内容。重建和增量构建时间对我们都很重要。我想知道是否可以简单搜索所有.cpp文件中的#include指令并计算每个文件包含的次数。通常包含的文件可能是stdafx.h文件的很好候选。当然,如果我不仅要考虑包含哪些文件,还要考虑包含文件包含哪些文件,这种策略完全是假的。

我怀疑它的问题,但我们使用Visual Studio 2005

+0

请为此投票:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4931119-allow-precompiled-headers-to-be-shared-between-pro – 2013-11-08 09:27:26

回答

4

A.H和b.h将是预编译头的一部分,没有必要后,包括他们。所有你需要的是包含stdafx.h,其中需要a.h或b.h。如果你有啊或BH stdafx.h中(stdafx.h中之前,所有的代码包括:被忽略)后明确,那么它会不会被编译,第二次(只是因为他们通常是由#pragma once指令或保护的定义),但编译器将在硬盘上打开该文件,如果你问这个问题,

顺便说一下,你应该知道,你可以使用几个预编译头文件(但每个cpp文件中不超过一个)。

+3

你说什么包括stdafx.h之后的ah或bh在技术上是正确的 - 编译器会再次查看头文件 - 但大多数头文件使用#pragma一次或包含警卫以防止发生这种情况。事实上,我会建议包括A.H,随时随地b.h需要它们即使A.H在stdafx.h中 - 否则你将无法调整stdafx.h中的内容后,而不会在编译错误无尽的名单。 – 2009-08-24 20:33:18

+0

是的,它们不会被编译,但是它们将在技术上由编译器打开。 – 2009-08-24 20:38:19

+1

我同意尼克的想法是有帮助的,但我只是害怕会有性能问题,因为我们需要额外的磁盘IO来找到#progma一次 – 2009-08-25 00:50:29