代码之家  ›  专栏  ›  技术社区  ›  Adam Naylor

关于预编译头的小问题

  •  0
  • Adam Naylor  · 技术社区  · 17 年前

    在查看一个开源代码库时,我遇到了以下代码:

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

    现在stableheaders.h是一个预编译头,由“control”cpp包含,以强制生成它。在预编译头之后出现的三个include也包含在stableheaders.h文件中。我的问题是,这些文件是否包含两次,以便代码库建立在不支持预编译头的编译器上?因为我假设include-guards/header-caching将使multiple-include无论如何都是冗余的…

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

    3 回复  |  直到 17 年前
        1
  •  2
  •   Scott Stanchfield    17 年前

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

        2
  •  0
  •   Vijay Mathew Chor-ming Lung    17 年前

    我想你自己回答了这个问题!预编译头是一个编译器功能。在任何情况下,如果有防护装置,收割台都不会包括两次。

        3
  •  0
  •   iain    17 年前

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

    但是,如果其他平台down支持预先编译的头文件,则只希望包含此源文件所需的头文件。因此,如果预编译头包含一些源文件只需要的include文件,那么只包含和编译所需的头文件会更快。

    推荐文章