c++ - 关于Visual C++中预编译头文件的问题

标签 c++ visual-studio precompiled-headers stdafx.h

如果我将一个 header (a.h) 放入 stdafx.h 并且该 header 包含另一个 header (b.h),但在 stdafx.h 中未提及,那么每次有人包含 a.h 时都会访问 b.h 或者它是否作为啊?如果编译成a.h,有人直接包含b.h会怎样?这是否会被预编译?

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

我怀疑这是否重要,但我们使用的是 Visual Studio 2005。

最佳答案

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

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

关于c++ - 关于Visual C++中预编译头文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324411/

相关文章:

c++ - 在 Ubuntu 中定位 Boost 库

c++ - 在 C++ 中继承抽象模板类并指定类型

visual-studio - 如何折叠所有不会在 Visual Studio 中编译的#ifdefs block ?

c++ - stdafx.cpp 中变量的定义

c++ - 转换具有不同容量的整数

c# - 如何导入 Manzana C# 库

c# - 将字符串转换为字符串[],然后将字符串[]转换为字节[]

c++ - 在 Mac 10.6.3 上使用 gsl

c++ - 如何使用代码块和 gcc 创建预编译头文件

c++ - CUDA 和模板 : specialization declaration needed?