msvc++中的预编译头文件pch.hpp和stdafx.h

预编译头文件

在 Visual Studio 中创建新项目时,会在项目中添加一个名为 pch.h 的“预编译标头文件”。 (在 Visual Studio 2017 及更高版本中,该文件名为 stdafx.h)此文件的目的是加快生成过程。 应在此处包含任何稳定的标头文件,例如标准库标头(如 )。 预编译标头仅在它或它包含的任何文件发生更改时进行编辑。 如果只在项目源代码中进行更改,则生成将跳过对预编译标头的编译。

pch.h、pch.hpp、stdafx.h是等价的,甚至你可以在项目中修改为自定义文件名。

来源:预编译的头文件 | Microsoft Learn

实际应用中,还经常把外部调用的API的头文件编译为PCH,比如调用STL、调用Windows的API windows.h等等。

vs中查看预编译头文件

可以在vs中: 选中某个project - 右键 - 属性 - c/c++ - 预编译头 - 预编译头文件,这个选项看到文件名

image-20230902171633954

在当前项目中所有cpp文件的第一行都要包含预编译头文件,也就是该头文件是第一个被包含的:#include "pch.hpp"

这是使用预编译头的硬性规定,假如不遵守这个规定,编译会失败,报错如下:

fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?

visual studio高级功能

重复地在所有源文件中添加预编译头文件很繁琐,所幸的是Visual C++提供了强制在所有源文件中包含指定头文件的选项,方法如下:选中 项目 - 右键 - 属C/C++ — 高级 - 强制包含文件 ,选项添加“预编译头文件”即可,如下图所示

image-20230902174750604

注意,在预编译头文件之后再重复包含该文件内已包含的头文件并不会有问题,所以不必特意去掉那些重复的包含语句

.pch为什么这么大?

在【属性 - c/c++ - 预编译头 - 预编译头文件】可以设置.pch文件的路径,一般会在obj目录下生成一个projectname.pch文件。

由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。

如果你的磁盘空间有限,可以在生成事件中将.pch文件删除。执行程序时并不需要它们

pch.hpp可以不存在

在vs的设置中指定了pch.hpp,项目中实际也可以不存在

pch.cpp

选中pch.cpp 右键属性 - c/c++ - 预编译头,可以看到它的选项是【创建】,而其它cpp文件是【使用】

posted @ 2023-09-03 10:48  赵青青  阅读(569)  评论(0编辑  收藏  举报