原文地址:http://blog.csdn.net/luoweifu/article/details/49010627

不陌生的stdafx.h

还记得带你玩转Visual Studio——带你新建一个工程一文中的图2(为方便阅读,已拷贝到下图 1)吗?我们默认勾选了Precompiled header复选框,创建的工程中就自动添加了stdafx.h和stdafx.cpp,stdafx.h就是预编译头文件,勾选Precompiled header就表明采用了微软的预编译头技术。


图 1:Application Settings

打开或关闭预编译方式

右键工程名->Properties->Configuration Properties->C/C++->Precompiled Header,Precompiled Header下拉列表框选择Use(/Yu)表示打开(使用)预编译头的方式,选择Not Using Precompiled Headers表示关闭预编译头的编译方式。


图 2:预编译头的设置

参数说明:
Precompiled Header:是否采用预编译头的方式;
Precompiled Header File:预编译头文件的名称,VS中文件名的大小写不敏感,但最好保持大小写相同。
Precompiled Header Output File:生成的.pch文件我名称,关于.pch文件将再在下面预编译原理小节中讲述。

如果是要使用预编译头文件的方式,还需要设置stdafx.cpp文件的属性。右键stdafx.cpp->Properties->Configuration Properties->C/C++->Precompiled Header,Precompiled Header下拉列表框中选择Create(Yc).


图 3:设置.cpp的属性

注意事项

每一个源文件的第一行代码必须包含预编译头文件。如果你的工程选用了预编译头文件的方式,每一个.cpp文件的第一行代码必须包含预编译头文件(#include “stdafx.h”),否则会编译出错。



预编译技术的内存原理

在Windows程序开发时,经常要在各个文件中包含windows.h、afx.h等标准头文件,而这些文件非常的大,在编译时就非常的慢,非常耗时。为解决这个问题,已是就有了预编译头文件的技术。

所谓头文件预编译技术,就是把一个工程(Project)中常用的一些头文件(如标准头文件Windows.h、Afxwin.h等,也可以是自己定义的头文件)包含在stdafx.h中,并对stdafx.h预先编译(在所有的.cpp文件编译之前进行编译),得到编译结果.pch文件(默认名称为ProjectName.pch),后期该工程在编译其它.cpp文件时不再编译stdafx.h中的内容(即使include了它),仅仅使用预编译的结果。
其中stdafx.h叫做预编译头文件,stdafx名称的英文全称为:Standard Application Framework Extensions,当然你也可以自己定义预编译头文件的名称,手动重命名stdafx.h,同时将上面图2和图3中对应的名称也得改过来。ProjectName.pch叫做预编译头

采用预编译头技术后,可以加快编译速度,节省编译时间。因为只需要预先编译一次就可以在所有的.cpp编译时使用,不用再次编译。这样带来的一个问题就是每一个.cpp文件的开头都要包含预编译头文件#include “stdafx.h”。因为预编译头技术是假定预编译头中的内容会在所有.cpp文件中使用,在编译你的 .cpp 的时候,就会将预编译头中已经编译完的部分加载到内存中。

使用预编译头文件需要注意的几个要点:
1. 你编写的任何.cpp文件都必须首先包含stdafx.h。
2. 如果你有工程文件里的大多数.cpp文件需要的.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
3. 由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。

带你玩转Visual Studio——带你理解微软的预编译头技术的更多相关文章

  1. 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码

    上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...

  2. 带你玩转Visual Studio——带你了解VC++各种类型的工程

    原文地址:http://blog.csdn.net/luoweifu/article/details/48816605 上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一 ...

  3. 带你玩转Visual Studio——带你理解多字节编码与Unicode码

    目录(?)[-] 多字节字符与宽字节字符 char与wchar_t string与wstring string 与 wstring的相关转换 字符集Charcater Set与字符编码Encoding ...

  4. 带你玩转Visual Studio——带你高效开发

    VassistX的简单介绍与下载安装 简单介绍 VassistX的全称是Visual Assist X,是whole tomato开发的一个非常好用的插件,可用于VC6.0及Visual Studio ...

  5. 带你玩转Visual Studio

    带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念:解决方案与工程. 解决方案(Solution):一个大型项目的整体的工作环境: 工 ...

  6. 带你玩转Visual Studio——性能分析与优化

    找到性能瓶颈 二八法则适合很多事物:最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的.在程序代码中也是一样,决定应用性能的就那20%的代码(甚至更少).因此优化实践中,我们将精力 ...

  7. 全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客文章

    全流程指导Visual Studio Code+Markdown Nice+gitee+PicGo管理自己的技术博客 1.背景 我挺喜欢写博客,但每一次将博客转移到公众号或者知乎,总是需要调整格式,不 ...

  8. 解决Visual C++工程中包含 .c 或cpp文件编译时产生的.pch预编译头错误(C1853)的办法

    2014-01-17 23:36 5128人阅读 评论(1) 收藏 举报 分类: 资料集(282) 版权声明:本文为博主原创文章,未经博主允许不得转载. 之前使用网上的一个开源代码,被封装成Windo ...

  9. 玩转visual studio系列之类设计图

    类设计图 vs 类设计图 微软  安装好vs2017后,在打开的IDE中,随便选择一个文件夹创建[类图],却发现没有该选项 类图辅助器 解决方案 1.点击[工具]选项卡,在下拉的菜单中选择第一项 获取 ...

随机推荐

  1. matplotlib imshow

    简单用法: imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colormap), 默认绘制 ...

  2. 解决Ubuntu17.04以上系统,yarn init报错

    安装yarn的时候老是装了个cmdtes的东西,官网是说删掉cmdtest重装就行,但是真没用. 正确的解决办法应该是像这位说的一样,先修改一下源,sudo apt update再下载,就能下载到真正 ...

  3. 洛谷P4843 清理雪道

    题意:给你DAG,求最小路径边覆盖.路径可重. 解:首先可以想到边转点,发现有n²条边,果断超时. 有源汇有上下界最小流. 建图:每条边都建立一条边,流量限制为[1, 1]. 源点向每个点连边,因为都 ...

  4. window.open打开页面居中显示

    <script type="text/javascript"> function openwindow(url,name,iWidth,iHeight) { var u ...

  5. 斯坦福大学公开课机器学习:监督学习在行人检测的应用(supervised learning for pedestrian detection)

    对于下图,左边是行人,作为阳性例子,赋值y=1,右边是景物,作为阴性例子,赋值y=0; 步长概念: 如下图所示,步长表示绿色框框移动的距离,有时候也称为滑动参数stride,如果一次移动一个像素,则称 ...

  6. java 中自定义类的概述

    作业: 描述商品类 Goods 4个属性 商品名字 大小 价格 库存 把商品类放进集合中 小米品牌 大小 价格 库存的数量 都存集合 华为..... 魅族 public class Goods{ St ...

  7. 【python】UnicodeEncodeError: 'ascii' codec can't encode/decode characters

    解决方案在文件头插入 # encoding=utf8 import sys reload(sys) sys.setdefaultencoding('utf8')

  8. java代码示例(4—1(作业))

    package com.java.union4; import static org.junit.Assert.*; import org.junit.Test; public class Demo ...

  9. teleport使用说明

          teleport使用说明 浏览器下载网页:只能浏览主页和少数网页,其它不能浏览,容量几百kb teleport下载项目一能完全离线看网页,7328多文件 9个JPG文件,大小134M te ...

  10. pyppeteer 报错-无法连接到浏览器

    问题 程序报错: Failed to connect to browser port: http://127.0.0.1:57899/json/version 原因 虽然pyppeteer在首次启动时 ...