预处理和预编译、预编译头文件stdafx.h和pch.h

预处理和预编译

预处理:发生在编译前,做些代码文本的替换工作。

  • 宏定义:#define宏定义的替换。
  • 文件包含:#include指明的源程序文件嵌入到当前源文件的指令位置处。
  • 条件编译:根据标识符来判断程序段是否需要编译这段代码。
// 条件编译
#ifdef	标识符程序段1
#else程序段2
#endif

预编译:发生在编译中,先预先编译某个文件并保存起来(预编译头文件),在编译遇到需要这个文件的地方直接拿来用。

预编译头文件

预编译头文件是什么:预编译头文件(Precompiled Header)实际上就是抓取一堆头文件,并把它们转换成为编译器可以使用的格式,从而不必一遍遍重新编译这些头文件。

为什么需要预编译头文件?
使用预编译头文件主要是为了节省编译的时间
平时写小的项目可能不会用到,一般大型项目会用的比较多。
在一个项目中,如果需要大量使用某个头文件的内容,例如string,那么编译的时候每次#include<string>的时候,都需要重新读取整个string头文件并且编译它。读取编译这个过程,预处理器需要复制string文件内容复制并解析,最后标记编译。当需要大量使用的时候,使用预编译头文件就只需要一次编译。

什么头文件适合放进预编译头文件?

  • 始终使用不常更改的一大段代码,例如外部依赖的库,那些基本用户不会去修改的代码。预编译文件仅在它或它包含的任何文件发生更改时进行编辑,如果是需要经常修改的代码放入,那么修改后编译就会导致整个预编译头文件都要重新编译。
  • 程序包含多个模块,所有这些模块都使用一组标准的包含文件和相同的编译选项,这样的话就不需要重复include很多。

stdafx.h和pch.h

stdafx.h和pch.h都是在Windows平台上使用的预编译头文件,是Microsoft Visual Studio 中自动生成,其它编译器不用,VS专用。

stdafx.h和pch.h本质上是相同的,只是在Visual Studio 2017及更高版本中,stdafx.h改为了pch.h。

如何使用预编译头文件

在stdafx.h和pch.h中添加需要预编译的头文件即可,然后在需要这些头文件的cpp文件夹中添加#include"stdafx.h"或者#include"pch.h"。

在MFC中,stdafx.h和pch.h文件中自动包含了MFC标准头文件(如Windows.h、Afxwin.h等),所以在需要的这些标准头文件的时候可以不用单独引用,而是直接引用stdafx.h或pch.h。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算基础-华为存储实验

存储配置流程 创建硬盘域&#xff08;CK&#xff0c;包括热备CK&#xff09;创建存储池&#xff08;CKG、Extent&#xff09;创建LUN、LUN组、将LUN加入LUN组创建主机、主机组、将主机加入主机组创建映射视图&#xff08;LUN组和主机组的映射&#xff09; 1. 创建CK 创建硬盘…

MyBatis sql拦截器实现一个自动根据租户进行分表的方案

需求描述&#xff1a; 在一个多租户系统中&#xff0c;通过 MyBatis 实现动态数据表分离。具体来说&#xff0c;您希望通过 MyBatis 拦截器在执行 SQL 时自动将表名根据当前租户 ID (tenantId) 进行修改。这样&#xff0c;每个租户的数据就可以存储在专属于它们的表中&#xf…

【数据结构】二叉查找树和平衡二叉树,以及二者的区别

目录 1、二叉查找树 1.1、定义 1.2、查找二叉树的优点 1.2、查找二叉树的弊端 2、平衡二叉树 2.1、定义 2.2、 实现树结构平衡的方法&#xff08;旋转机制&#xff09; 2.2.1、左旋 2.2.2、右旋 3、总结 1、二叉查找树 二叉查找树又名二叉排序树&#xff0c;亦称二叉搜…

究极小白如何自己搭建一个自动发卡网站-独角数卡

本人从来没接触过建站&#xff0c;我之前都是在TB上花90叫别人给我搭建的网站&#xff0c;前几天这个TB店倒闭跑路了&#xff0c;而我的发卡网也打不开了&#xff0c;没办法&#xff0c;逼上梁山&#xff0c;自己捣鼓出来了&#xff01;下面是2023/4/2自己建好的&#xff01; …

【C++】STL简单介绍(了解入门!!!!)

文章目录 前言1. 什么是STL&#xff1f;2. STL的版本3. STL的六大组件4. STL的重要性5. 如何学习STL6. STL的缺陷总结 前言 C Standard Template Library&#xff08;STL&#xff09;是C编程语言的重要组成部分&#xff0c;它提供了丰富的数据结构和算法&#xff0c;为C程序员…

租用一个服务器需要多少钱?2024阿里云新版报价

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

网络安全问题概述

1 计算机网络面临的安全性威胁 两大类威胁&#xff1a;被动攻击和主动攻击。 被动攻击 指攻击者从网络上窃听他人的通信内容。 通常把这类攻击称为截获。 攻击者只是观察和分析某一个协议数据单元 PDU&#xff0c;以便了解所交换的数据的某种性质&#xff0c;但不干扰信息…

AI Infra论文阅读之LIGHTSEQ(LLM长文本训练的Infra工作)

感觉这篇paper有几个亮点&#xff0c;首先把Megatron-LM的Self-Attention模块的模型并行方式变成序列并行&#xff0c;优化了通信量&#xff0c;同时通过计算和通信重叠近一步压缩了训练迭代时间。另外&#xff0c;在使用重计算的时候发现当前Huggingface/Megatron-LM的重计算策…

vue3 之 商城项目—支付

支付模版 pay/index.vue <script setup> const payInfo {} </script> <template><div class"xtx-pay-page"><div class"container"><!-- 付款信息 --><div class"pay-info"><span class"ic…

嵌入式Qt Qt中的字符串类

一.Qt中的字符串类 QString vs string&#xff1a; QString在Qt库中几乎是无所不在的 所有的Qt图形用户组件都依赖于QString 实验1 &#xff1a;QString 初体验 #include <QDebug> void Sample_1() {QString s "add";s.append(" "); // &q…

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java)

Codeforces Round 926 (Div. 2) B. Sasha and the Drawing (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) B题传送门&#xff1a;B. Sasha and the Drawing 题目&#xff1a;B. Sasha and the Drawing Example input 3 4 3 3 3 10 3 9 4 7 7 11 2 3output 2 …

基于结点电压法的配电网状态估计算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 结点电压法的基本原理 4.2 结点电压法在配电网状态估计中的应用 5.完整程序 1.程序功能描述 基于结点电压法的配电网状态估计算法.对配电网实施有效控制和操作的前提是实时数据库中数据…

如何看待“完成比完美更重要”?

问题描述&#xff1a;如何看待“完成比完美更重要”&#xff1f; 问题解答&#xff1a; “完成比完美更重要”这句话强调了完成任务的重要性和优先级&#xff0c;而不是过分追求完美。在很多情况下&#xff0c;这个观点是非常实用的。 首先&#xff0c;完成一个任务可以带来…

【JavaEE】_Fiddler抓包HTTP请求与响应

目录 1. Fiddler简介 2. Fiddler安装步骤 3. 抓包结果举例&#xff08;sogou.com&#xff09; 1. Fiddler简介 1. 要查看HTTP的请求和响应&#xff0c;需要使用抓包工具进行抓包&#xff1b; 抓包即获取网卡上经过的数据并显示出来&#xff0c;常用的抓包工具有wireshark和…

BIOS and UEFI

BIOS : Basic Input/Output System UEFI: Unified Extensible Firmware Interface Notes: 1. 两者都是主板上的firmware. 2. 两者的作用都包括开机后检查硬件&#xff0c;从硬盘上寻找bootloader(用于加载操作系统&#xff0c;例如GRUB). # 操作系统的启动过程&#xff1a…

linux中的文件操作

linux的理念 在linux中的一切皆为文件&#xff01;&#xff01;&#xff01; 在上一篇博客中提到过&#xff0c;Linux中的桌面本质上也是一种文件&#xff0c;而现在&#xff0c;在本篇博客中要对这种理念进行进一步的提升&#xff0c;也就是在Linux系统中的一切皆为文件&#…

数据结构对链表的初步认识(一)

已经两天没有更新了&#xff0c;今天就写一篇数据结构的链表吧&#xff0c;巩固自己也传授知识&#xff0c;不知道各位是否感兴趣看看这一篇有关联表的文章。 目录 链表的概念与结构 单向链表的实现 链表各个功能函数 首先我在一周前发布了一篇有关顺序表的文章&#xff0c;…

RCS系统之:基础算法

设计仓库机器人的控制管理系统涉及到路径规划、任务分配、库存管理、通信系统等方面。以下是一个基本的仓库机器人控制管理系统方案的概述&#xff1a; 路径规划&#xff1a;设计一个路径规划系统&#xff0c;用于确定机器人在仓库内的最佳行驶路径&#xff0c;以最大程度地提…

Docker基础(镜像的结构,Dockerfile语法介绍,基于Ubuntu镜像来构建一个Java应用)

镜像 镜像结构 要想自己构建镜像&#xff0c;必须先了解镜像的结构。 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置&#xff0c;就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。 因此&#xff0c;自定义镜像本质就是依次准备好程序…

MySQL学习记录——십일 索引

文章目录 1、理解索引2、聚簇、非聚簇索引3、操作1、主键索引2、唯一键索引3、普通索引4、注意事项 4、全文索引 1、理解索引 MySQL服务器是在内存中的&#xff0c;所有数据库的CURD操作都是在内存中进行&#xff0c;索引也是如此。索引是用来提高性能的&#xff0c;它通过组织…