C++ 预编译头文件(Precompiled Header,PCH)

在C++中,**预编译头文件(Precompiled Header,PCH)**是一种技术,可以用来提高编译速度。它的原理是先将一些常用的头文件预处理,生成一个二进制文件(通常是.pch文件),然后在后续的编译中,直接引用这个二进制文件,避免了重复的预处理过程,从而提高了编译速度。

预编译头文件通常包含一些常用的头文件和符号定义,例如标准库的头文件、常用的宏定义、预定义的类型等等。编译器在编译源文件之前,会先加载这个预编译头文件,将其中的内容预处理后,生成一个二进制文件。后续编译时,如果其他源文件中也包含了同样的预编译头文件,编译器会直接使用之前生成的二进制文件,而不是重新预处理一遍头文件。这样就可以避免重复的预处理过程,提高编译速度。

需要注意的是,预编译头文件并不是所有情况下都能提高编译速度。只有在项目中包含大量的头文件且这些头文件中存在重复的部分时,才能显著地提高编译速度。此外,预编译头文件也需要根据具体的编译器和操作系统进行设置和使用

假设我们有一个项目,其中有多个源文件需要包含以下的头文件:

#include <string>
#include <iostream>

这些头文件都是标准库中比较常用的,因此每个源文件都需要预处理这些头文件。如果项目非常庞大,源文件数量很多,那么每次编译都要预处理这些头文件,会大大降低编译速度。

现在我们可以创建一个预编译头文件(例如,命名为stdafx.h),将上述头文件放进去:
在这里插入图片描述

然后,在每个源文件的开头,添加#include “stdafx.h”:

#include "stdafx.h"

int main(int argc, char**argv)
{
  std::string s = "Hi";
  std::cout<< s << std::endl;
  return 0;
}

你可以像编译其他文件一样编译头文件,但是输出结果会放在一个以“.gch”为后缀的文件中。

例如,如果你预编译了“stdafx.h”头文件,你就会得到一个预编译头文件,每次你包含“stdafx.h”头文件时,编译器都会自动搜索名为“stdafx.h.gch”的预编译头文件。

在这里插入图片描述

  g++ -c stdafx.h -o stdafx.h.gch
  g++ main.cpp 
 

在这里插入图片描述

即使你在第 1 步之后删除了 stdafx.h,编译也会正常进行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值