5

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

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

如果我有使用当前不在现有预编译头文件中的通用 .h 文件的类,将它们扔进去会有什么真正的好处吗?也许编译速度,但我认为它也会清理类/标题?

什么是预编译头文件的做什么和不做什么?

4

3 回答 3

6

通过从其他源文件中删除这些标头,不要依赖预编译标头中包含的标头进行“代码清理”。如果您想停止使用 PCH,这将是一场噩梦。你总是希望你的依赖在每个源文件中都是明确的。只需在两个地方都包含它们 - 它没有害处(假设您有适当的包含防护)。

由多个源文件包含的头文件是包含在 PCH 中的一个很好的候选者(特别是如果它很长)。我发现我并没有太认真地很少更改的标头放入 PCH 中。但是,这取决于您的整体项目结构。如果您经常进行完整构建,请绝对避免使用此建议。如果您想最小化增量重建中的工作,那么这是一个考虑因素。以我的经验,重建 PCH 的速度相对较快,而且总体上(在大多数情况下)编译的整体加速速度远远超过了重建 PCH 的成本。我不确定是否所有 PCH 系统都足够聪明,可以确定当 PCH 中包含的标头发生更改时不需要重建每个源文件(VC++ 是),但明确#include在每个翻译单元中添加您需要的一切肯定会促进这一点(另一个原因是您不应该依赖PCH 中包含的内容)

如果您的编译器支持#include在编译期间显示每个文件的树的选项,这将有助于识别应该包含在 PCH 中的头文件(出现最多的头文件)。我最近在我正在处理的一个项目中经历了这一点(该项目已经在使用 PCH,但不是最佳的)并将 750K 行 C++ 的构建速度从大约 1.5 小时缩短到 15 分钟。

于 2010-03-23T20:50:25.740 回答
3

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

于 2010-03-23T19:58:29.407 回答
0

这是一个权衡:系统/库头文件肯定会放在 PCH 中,对于您项目中的头文件,这取决于。

我们的项目有大量生成的代码,与项目的其他部分相比,这些代码的更改频率要低得多。这些标头进入 PCH 是因为它们在每个单独的文件中需要大量时间来处理。如果您更改它们,它会很昂贵,但您必须权衡该成本与将它们放在文件中更频繁的较小节省。

于 2010-03-23T21:14:33.777 回答