关于预编译头文件的小问题

时间:2009-07-29 12:50:00

标签: c++ precompiled-headers

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

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

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

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

3 个答案:

答案 0 :(得分:2)

不支持预编译头的编译器只包含StableHeaders.h并每次重新解析(而不是使用预编译文件)。它不会导致任何问题,也不会像你问的那样解决某些编译器的任何问题。我认为这只是一个可能在开发过程中发生的一个小错误。

答案 1 :(得分:0)

我想你自己回答了问题!预编译头是编译器功能。如果存在警卫,则无论如何都不会包括两次标题。

答案 2 :(得分:0)

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

但是,如果其他平台向下支持预编译头文件,则只需要包含此源文件所需的头文件。因此,如果预编译头包含仅某些源文件所需的包含文件,则只需包含并编译所需的头文件即可。