预编译头文件:

最常见的使用场景就是 StdAfx.h 文件,在这个文件中包含常用的头文件,比如windows.h,cstdio,string,别的 .cpp 文件去包含 StdAfx.h 头文件。编译的时候 StdAfx.h 尽管被多个 .cpp 包含,但只会编译一次。加快了编译速度。
StdAfx.cpp 专门用来生成预编译文件,StdAfx.cpp 里只有一行代码 #include "StdAfx.h", 编译 StdAfx.cpp 会产生一个 .pch 文件。别的 .cpp 文件编译的时候就会使用这个 .pch 文件。
貌似还有高级使用场景,现在还没有了解。

预编译头的使用方法:
1. 创建预编译头文件 StdAfx.h, 在这个头文件中包含希望包含的头文件,注意不要包含自己的头文件,只包含系统头文件,不会发生变动。
2. 创建 StdAfx.cpp ,在这个文件中包含 StdAfx.h
3. 我们要让编译器知道, StdAfx.cpp 文件是用来创建 .pch 文件的。在 StdAfx.cpp 文件上面右键 --> 属性 --> 所有配置 --> C/C++ --> 预编译头 --> 选择 : 创建预编译头(/Yc)
4. 我们要让编译器知道,哪些 .cpp 文件需要使用 .pch 文件。在需要使用 .pch 文件的 .cpp 中添加 #include "StdAfx.h", 然后在 .cpp 文件上右键 --> 属性 --> 所有配置 --> C/C++ --> 预编译头 --> 选择 : 使用预编译头(/Yu)
5. 单独编译 StdAfx.cpp 就会产生 .pch 文件了,如果以后不小心删除了 .pch 文件,可以单独编译一下 StdAfx.cpp 文件。

注意:
1. 并不是所有的 .cpp 文件都要包含 StdAfx.h ,是否使用预编译头是可以在配置项中修改的。
2. 如果一个 .cpp 文件使用了预编译头文件,那么要在 .cpp 文件的最开头去包含 StdAfx.h 文件,否则会跳过 #include "StdAfx.h" 之前的 #include 代码。出现 warning C4627: “#include "lua_notifyicon.h"”: 在查找预编译头使用时跳过

参考:

http://38288890.blog.163.com/blog/static/19612845320081164495863/

http://www.cnblogs.com/magic-cube/archive/2011/12/06/2278568.html

预编译头文件 StdAfx.h的更多相关文章

  1. C++预编译头文件 – stdafx.h

    预编译头文件的由来 也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含.可是,这到底是为什么呢?预编译头有什么用呢? 咱们从头文件的编译原理讲起.其实头文件并不神秘,其在编译时的作用,就是把 ...

  2. 预编译头文件stdafx.h-stdafx.cpp-stdafx.pch(pre-compile headfile)

    tdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展). 所谓头文件预编译,就是把一个工程(Project)中使用的一些M ...

  3. 预编译头文件pch

    1.         预编译头文件 作用:提高编译效率.预编译头文件(扩展名为.PCH),是为了提高编译效率而使用的一种方法,把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.避免每次编译 ...

  4. Visual Studio中头文件stdafx.h的作用

    在较新版的Visual Studio中,新生成的C++项目文件的的头文件夹下会默认有头文件stdafx.h,而源文件夹下则默认有源文件stdafx.cpp,手动将这些文件删除后,编译时系统还会报错.下 ...

  5. VS2010遇到fatal error C1083: 无法打开预编译头文件:“xxx.pch”: No such file or directory

    对C++和VS2010非常不熟悉,但是无奈赶着项目,只能看了点基础就上手,然后就碰到这个问题了. 原因分析: http://bbs.csdn.net/topics/340191697?page=1 编 ...

  6. fatal error C1083: 无法打开预编译头文件:“Debug\a.pch”:No such file or directory

    一.解决方法 右键点击你创建的项目,选择“属性标签”点击属性,弹出“项目属性页”,在左侧找到以下位置  配置属性 -->  C/C++  --> 预编译头,并选择它:在右边的菜单中选择 “ ...

  7. C++ 预编译头文件

    1.解决什么问题? C++ 编译器是单独,分别编译的,每个cpp文件,进行预编译(也就是对#include,define 等进行文本替换),生成编译单元.编译单元是一个自包含文件,C++编译器对编译单 ...

  8. 【转】预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...

  9. VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)

    当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal err ...

随机推荐

  1. OpenCV检测人脸实例代码

    下面是使用OpenCV通过在硬盘中读入图像来对其进行Haar人脸检测的代码. //包含头文件 #include <opencv2/core/core.hpp> #include " ...

  2. C++中的链表节点用模板类和用普通类来实现的区别

    C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现. #include <iostream> using namespace std; template<typen ...

  3. 刷机总结(阿里云os-->android4.2.2)注明:本文不是教程

    注明:本文不是教程 写这篇文章的目的:让准备刷机的人(无论你是小白还是老鸟,当然老鸟就不用看了)用最短的时间了解刷机过程 其实本来目的是准备将阿里云的2.3.7升级到3.0的,但是3.0没有针对基伍大 ...

  4. 单点登录(iwantmoon.com出品)

    早年便听到单点登录,一直因为感觉很简单,就没有动手去弄,正好现在公司有要求,那么OK,直接做了一个单机版的单点登录. 原理,可以参考SSO. Now,我们来看看我的实现吧.看下图 我们平时所做的登录, ...

  5. c++ ip地址相关

    #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/typ ...

  6. Posix线程编程指南(2) 线程私有数据

    概念及作用 在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据.在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有.但有时应用程序设计中有必要提供 ...

  7. maven插件:tomcat插件和jetty插件的区别

    在程序是多模块结构的时候,使用tomcat的maven插件和jetty的maven插件有细微差别: 1.tomcat7-maven-plugin   可以直接在parent的邮件直接运行:tomcat ...

  8. 【BZOJ】【1520】【POI2006】Szk-Schools

    网络流/费用流 比较裸的一道题 依旧是二分图模型,由源点S连向每个学校 i (1,0),「注意是连向第 i 所学校,不是连向学校的标号m[i]……唉这里WA了一次」 然后对于每所学校 i 连接 j+n ...

  9. 引入代码后,在@override报错

    最近引入了spring的源码到工程里,发现凡是@override修饰的代码都会报错 这里有java历史的原因 5及以前不支持@override的注解,所以,此时,你最需要知道的是当前项目djk的编译版 ...

  10. c++ union

    什么是union? 翻译过来说,就是共用体,或者也叫联合体.说到了union,也就是共用体,就不得不说一下struct了,当我们有如下的struct的定义时:   1 2 3 4 5 6 struct ...