查看一个开源代码库,我遇到了这段代码:
#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...
现在StableHeaders.h是一个预编译的头文件,它被'control'cpp包含在内以强制它生成。无论如何,在预编译的头文件也包含在StableHeaders.h文件中之后出现的三个包括。我的问题是,这些文件是否包含两次,以便代码库将构建在不支持预编译头的编译器上?正如我假设包含警卫/标头缓存将使多重包括多余...
编辑顺便说一句,stableheaders.h文件检查了win32(粗略),所以我再次假设在stableheaders.h内的包含不会包含在不支持预编译头的编译器中。
答案 0 :(得分:2)
不支持预编译头的编译器只包含StableHeaders.h并每次重新解析(而不是使用预编译文件)。它不会导致任何问题,也不会像你问的那样解决某些编译器的任何问题。我认为这只是一个可能在开发过程中发生的一个小错误。
答案 1 :(得分:0)
我想你自己回答了问题!预编译头是编译器功能。如果存在警卫,则无论如何都不会包括两次标题。
答案 2 :(得分:0)
我能想到保护预编译头的唯一原因,无论如何都包括这些东西就是速度。使用预编译头文件的原因是为了加快编译时间,这可以通过包含和编译预编译头文件的内容来实现,当你这样做时,你可以包含仅由75%的源文件使用的头文件,它仍然是比没有预编译的头文件更快。
但是,如果其他平台向下支持预编译头文件,则只需要包含此源文件所需的头文件。因此,如果预编译头包含仅某些源文件所需的包含文件,则只需包含并编译所需的头文件即可。