预编译的头文件 pch.h

预编译的头文件

在 Visual Studio 中创建新项目时,名为pch.h预编译头文件将添加到项目中。(在 Visual Studio 2017 及更早版本中,该文件称为stdafx.h。)该文件的目的是加快构建过程。任何稳定的头文件,例如标准库头文件,如,都应该包含在此处。预编译的头文件只有在它或它包含的任何文件被修改时才会被编译。如果您只对项目源代码进行更改,则构建将跳过对预编译头文件的编译。<vector>

预编译头文件的编译器选项是/Y。在项目属性页中,选项位于Configuration Properties > C/C++ > Precompiled Headers 下。您可以选择不使用预编译头文件,并且可以指定头文件名以及输出文件的名称和路径。

    自定义预编译代码

对于需要大量时间来构建的大型项目,您可能需要考虑创建自定义预编译文件。Microsoft C 和 C++ 编译器提供了用于预编译任何 C 或 C++ 代码(包括内联代码)的选项。使用此性能特性,您可以编译稳定的代码体,将代码的编译状态存储在文件中,并在后续编译期间将预编译的代码与仍在开发中的代码结合起来。每次后续编译都更快,因为稳定的代码不需要重新编译。

     何时预编译源代码

预编译代码在开发周期中有助于减少编译时间,尤其是在以下情况下:

  • 您总是使用大量不经常更改的代码。

  • 您的程序包含多个模块,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,所有的包含文件都可以被预编译成一个预编译的头文件。

第一次编译——创建预编译头 (PCH) 文件的编译——比后续编译花费的时间要长一些。通过包含预编译代码,后续编译可以更快地进行。

您可以预编译 C 和 C++ 程序。在 C++ 编程中,通常的做法是将类接口信息分离到头文件中。这些头文件稍后可以包含在使用该类的程序中。通过预编译这些头文件,您可以减少程序编译所需的时间。

 笔记

尽管每个源文件只能使用一个预编译头 (.pch) 文件,但您可以在一个项目中使用多个 .pch 文件。

     预编译代码的两种选择

您可以预编译任何 C 或 C++ 代码;您不仅限于预编译头文件。

预编译需要计划,但如果您预编译源代码而不是简单的头文件,它会提供显着更快的编译。

当您知道源文件使用通用的头文件集但不以相同的顺序包含它们时,或者当您想在预编译中包含源代码时,预编译代码。

预编译头文件选项是/Yc(创建预编译头文件)/Yu(使用预编译头文件)。使用/Yc创建预编译头文件。当与可选的hdrstop pragma 一起使用时,/Yc允许您预编译头文件和源代码。选择/Yu以在现有编译中使用现有的预编译标头。您还可以将/Fp/Yc/Yu选项一起使用,为预编译的标头提供替代名称。

/Yu/Yc的编译器选项参考主题讨论了如何在开发环境中访问此功能。

     预编译的标头一致性规则

因为 PCH 文件包含有关机器环境的信息以及有关程序的内存地址信息,所以您应该只在创建它的机器上使用 PCH 文件。

     预编译头文件的每个文件使用的一致性规则

/宇编译器选项,您可以指定要使用的PCH文件。

当您使用 PCH 文件时,编译器假定与您创建 PCH 文件时相同的编译环境 — 使用一致的编译器选项、pragma 等的编译环境,除非您另外指定。如果编译器检测到不一致,它会发出警告并在可能的情况下识别不一致。此类警告不一定表示 PCH 文件存在问题;他们只是警告您可能发生的冲突。PCH 文件的一致性要求在以下部分中描述。

      编译器选项一致性

使用 PCH 文件时,以下编译器选项可能会触发不一致警告:

  • 使用预处理器 (/D) 选项创建的宏在创建 PCH 文件的编译和当前编译之间必须相同。不检查已定义常量的状态,但如果这些更改可能会出现不可预知的结果。

  • PCH 文件不适用于 /E 和 /EP 选项。

  • 在使用 PCH 文件的后续编译可以使用这些选项之前,必须使用生成浏览信息 (/FR) 选项或排除局部变量 (/Fr) 选项创建 PCH 文件。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值