预编译头设计问题

ML.*_*ML. 4 c++ precompiled-headers

我有使用预编译头的代码.(之前由其他人完成)

在其中,它们包括几个.h文件.

如果我有使用普通.h文件的类,这些文件当前不在现有的预编译头文件中,那么将它们扔在那里有什么好处呢?也许编译速度,但我认为它会清理类/标题有点过吗?

对预编译的标题有什么作用和不做什么?

小智 5

通过从其他源文件中删除这些标头,不要依赖预编译标头包含的标头进行"代码清理".如果你想停止使用PCH,这会造成噩梦.您始终希望您的依赖项在每个源文件中都是显式的.只需将它们包含在两个地方 - 它就没有任何危害(假设您有适当的包括防护装置).

多个源文件包含的头文件是包含在PCH中的良好候选者(特别是如果它很长).我发现我并没有太认真地接受这个建议,只能很少改变的标题放到PCH中.但是,这取决于您的整体项目结构.如果您经常进行完整构建,请务必避免此建议.如果要最小化增量重建中的工作,那么这是一个考虑因素.根据我的经验,重建PCH的速度相对较快,而且总体编译速度(大多数情况下)远远超过了编译成本.我不确定所有PCH系统是否足够聪明,以确定当PCH中包含的标题发生变化(VC++)时,不需要重建每个源文件,但是#include在每个翻译单元中明确表达所需的一切肯定会促进这种(另一个原因应该不是什么是你的PCH包括依靠)

如果您的编译器支持#include在编译期间显示每个文件的树的选项,这对于识别应包含在PCH中的标题(显示最多的标题)非常有用.我最近在一个正在研究的项目(已经使用PCH,但不是最佳的)上完成了这项工作,并加快了750K系列C++的构建,从大约1.5小时到15分钟.


And*_*bel 3

将不变的系统包含放入预编译头中。这将加快编译速度。不要将您自己可能更改的任何头文件放入预编译头中,因为每次更改它们时,您都必须重建整个预编译头。