有关Visual C++中预编译头的问题

Dav*_*ave 5 c++ precompiled-headers stdafx.h visual-studio

如果我把一个标题(啊)放到stdafx.h中并且该标题包含stdafx.h中没有提到的另一个标题(bh),那么每次有人包含啊或者它是作为一部分编译的时候会被访问啊?如果编译成啊,有人直接包含bh会发生什么?这会被预编译吗?

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

我怀疑这很重要,但我们正在使用Visual Studio 2005.

Kir*_*sky 4

ah和bh将成为预编译头的一部分,以后不需要包含它们。您所需要的只是在需要 ah 或 bh 的地方包含 stdafx.h 。如果您在 stdafx.h 之后显式包含 ah 或 bh (stdafx.h 包含之前的所有代码都将被忽略),那么它将不会被第二次编译(只是因为它们通常受#pragma once指令或定义保护),但编译器会如果您询问的话,请打开硬盘上的该文件,

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

  • 您所说的在 stdafx.h 之后包含 ah 或 bh 在技术上是正确的 - 编译器将再次查看标头 - 但大多数标头使用 #pragma 一次或包含防护来防止这种情况发生。事实上,我建议在任何需要的地方包含 ah 和 bh,即使 ah 位于 stdafx.h 中——否则您以后将无法调整 stdafx.h 的内容,而不会遇到无穷无尽的编译错误列表。 (3认同)