首页 > 编程语言 >msvc++中的预编译头文件pch.hpp和stdafx.h

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

时间:2023-09-03 10:55:20浏览次数:55  
标签:文件 头文件 msv hpp c++ 编译 pch

预编译头文件

在 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文件是【使用】

标签:文件,头文件,msv,hpp,c++,编译,pch
From: https://www.cnblogs.com/zhaoqingqing/p/17674130.html

相关文章

  • 报错test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regre
    问题描述:ubuntu18.04安装opencv4.5.1+contrib报错test_features2d.cpp:51:10:fatalerror:features2d/test/test_detectors_regression.impl.hpp:没有那个文件或目录解决方法如题,报错如下:解决方法:按照报错提示,将opencv-4.5.1/modules中的features2d文件夹一整个复制到ope......
  • 安装opencv_contrib-3.4.9, fatal error: opencv2/xfeatures2d.hpp: 没有那个文件或目
    1.在Opencv的CmakeLists.txt中加入以下include语句:INCLUDE_DIRECTORIES("/home/yourusername/Dependencies/opencv-3.4.9/opencv_contrib-3.4.9/modules/xfeatures2d/include")2.ippicv_2019_lnx_intel64_general_20180723.tgz下载地址:链接:https://pan.baidu.com/s/1mu......
  • opencv_contrib编译:fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or dir
    在Ubuntu上编译opencv3.4.2源码时,遇到下面的错误,错误1:/home/src/software/opencv-3.4.2/modules/stitching/include/opencv2/stitching/detail/matchers.hpp:52:42:fatalerror:opencv2/xfeatures2d/cuda.hpp:Nosuchfileordirectory # include"opencv2/xfeatures2d/cud......
  • phpcmsV9调用默认的分页样式
    //回复列表 publicfunctionganyanreply(){//点击后台-内容-留言管理,默认运行到这 $page=isset($_GET['page'])?intval($_GET['page']):1;//分页 $tablename=$this->db->db_tablepre.$MODEL[$modelid]['tablename'];// $this->db->......
  • phpcmsv9更换域名后和空间后登陆后台提示验证码错误如何解决
    修改 caches\configs\system.php 的//网站路径 'web_path' => '/apppath/',和'js_path' => 'http://localhost/apppath/statics/js/', //CDN JS'css_path' => 'http://localhost/apppath/statics/css/', //CD......
  • 编写C语言头文件的艺术
       参考:C语言编程标准头文件格式推荐及其含义解释(#ifndef,#define,extern“C“,#endif)_c语言头文件格式_huangbinvip的博客-CSDN博客......
  • 安森美 IDE(基于Eclipse)报头文件缺少的解决方法
    安森美IDE(基于Eclipse)报头文件缺少,但是能正常跳转到头文件在这里面将路径包含进来,建议两个都添加一次  在项目上点击右键,然后点击Index下的Rebuild重建 ......
  • CH32V003在MRS中的头文件定义
    在MRS的头文件core_riscv.h中有如下的定义。 #define__Ivolatileconst#define__Ovolatile#define__IOvolatile 上述定义,通过define语句把__IO等效为volatile,把__O等效为volatile,把__I等效为volatileconst。一般来说宏定义都用大写形式,但因......
  • Qt编译器——MinGW和MSVC的区别
    #1、MSVC:即MicrosoftVisualC++Compiler,即微软自己的编译器#2、MinGW:我们都知道GNU在Linux下面鼎鼎大名的gcc/g++,MinGW则是指MinimalistGNUforWindows的缩写Qt用MSVC和MinGW哪个编译器编译程序比较好?我的建议是使用MSVC。理由一:qtcreator的debuger有功能缺陷,经......
  • 《控制台篇》头文件h和源文件cpp的区别
    头文件和源文件区别参考链接:https://zhidao.baidu.com/question/940855602014421372.html头文件和源文件在本质上没有任何区别。只不过一般:后缀为.h的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为.c的文件是源文件,内含函数实现,变量定义等内容。而且是什么后......