0

查看一个开源代码库,我遇到了这段代码:

#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...

现在 StableHeaders.h 是一个预编译的头文件,它包含在“控制”cpp 中以强制生成它。无论如何,在预编译头之后出现的三个包含也包含在 StableHeaders.h 文件中。我的问题是,这些文件是否包含两次,以便代码库构建在不支持预编译头文件的编译器上?正如我假设包含警卫/标头缓存将使多个包含冗余无论如何...

顺便说一句, stableheaders.h文件对 win32 进行了检查(大致),所以我再次假设 stableheaders.h 中的包含不会包含在不支持预编译头文件的编译器中。

4

3 回答 3

2

不支持预编译头文件的编译器只会包含 StableHeaders.h 并每次重新解析它(而不是使用预编译文件)。它不会引起任何问题,也不会像您要求的那样解决某些编译器的任何问题。我认为这只是一个小“错误”,可能在开发过程中随着时间的推移而发生。

于 2009-07-29T12:56:29.957 回答
0

我想你自己回答了这个问题!预编译头文件是编译器功能。如果守卫在场,则在任何情况下都不会包含两次标题。

于 2009-07-29T13:03:59.583 回答
0

我能想到的保护预编译头文件并包含这些东西的唯一原因是速度。使用预编译头文件的原因是为了加快编译时间,这是通过包含和编译预编译头文件的内容来工作的,当你这样做时,你可以包含仅由 75% 的源文件使用的头文件,它仍然是比没有预编译头文件要快。

但是,如果其他平台支持预编译的头文件,您只想包含此源文件所需的头文件。因此,如果预编译的头文件包含仅某些源文件需要的包含文件,那么只包含和编译您需要的头文件会更快。

于 2009-07-29T15:08:31.003 回答