当前位置:首页 > 芯闻号 > 充电吧
[导读]1什么是头文件预编译所谓头文件预编译,就是把一个工程(Project)中使用的一些标准头文件(如Windows.H、stdio.h)或者那些稳定的,不会被频繁修改的代码或者其它头文件预先编译,以后编译

1什么是头文件预编译

所谓头文件预编译,就是把一个工程(Project)中使用的一些标准头文件(如Windows.H、stdio.h)或者那些稳定的,不会被频繁修改的代码或者其它头文件预先编译,以后编译该工程时,不再编译这部分代码和头文件,仅仅使用预编译的结果(.pch文件)。这样可以加快编译速度,节省时间。

(注意:如果包含在预编译头文件的这些代码被修改,则需要重新编译生成预编译头文件,而生成预编译头文件很耗时间。)

2如何使用预编译头文件

想必大家都知道StdAfx.h这个文件,很多人都认为这是VC提供的一个“系统级别”的,编译器自带的一个头文件。其实不是,这个文件可以是任何名字的头文件。那么如何通过自己定义的头文件来创建预编译头文件呢?我们知道一个头文件是不能编译的。所以还需要一个 .cpp文件来生成 .pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件里只有一句代码就是:#include “Stdafx.h”。原因是理所当然的,我们仅仅是要它能够编译而已,也就是说,要的只是它的 .cpp的扩展名。

VS2005中打开project ->Properties ->C/C++ ->Precompiled Headers对话框(其它编译器稍有不同)。我们可以用/Yc编译开关来指定StdAfx.h来生成一个.pch文件,/Yu编译开关来指定使用StdAfx.h生成的.pch文件,通过/Fp编译开关来指定要生成的或者要使用的 .pch文件的名字。

而且你也可以将这个已经生成的预编译头文件进行改名或者重新创建。

(1)  将原工程中的stdafx.h和stdafx.cpp从当前工程中删掉。

(2)  将stdafx.h和stdafx.cpp改为你想要的任何名子,比如myafx.h和myafx.cpp。

(3)  将myafx.cpp中的“#include   "stdafx.h "”改为“#include   "myafx.h "”。

(4)  将myafx.h和myafx.cpp再分别加入到当前工程中。

(5)  进入工程属性设置   ->   C/C++   ->   预编译头,更改stdafx.h为myafx.h。

(6)  进入解决方案管理器,在myafx.cpp上单击右键   ->   属性   ->   C/C++   ->   预编译头,将第一项设为“创建预编译头。

(7)  将工程中所有的#include   "stdafx.h "改为#include   "myafx.h " 。

(8)  保存、编译,修改成功。

3注意事项

(1)如果使用了/Yu,就是说使用了预编译,我们在每个.cpp文件的最开头,包含你指定产生pch文件的.h文件(默认是stdafx.h)。如果你没有包含这个文件,则会产生一个致命错误fatal error C1010: unexpected end of file while looking for precompiled header directive .

(2)如果你把pch文件弄丢了,编译的时候就会产生很多不正常的行为。根据以上的分析,你只要让编译器生成一个pch文件。也就是说把 stdafx.cpp(即指定/Yc的那个cpp文件)从新编译一遍。当然你也可以Rebuild All。简单一点就是选择那个cpp 文件,编译一下就可以了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

其实在 c++语言里面const修饰的才算是一个真正的常量,在 c 语言中 const 可以说是个“冒牌货”。为什么会这样?其实是 c++ 编译器对 const 进行了加强,当 c++ 编译器遇到常量声明时,不会像 c...

关键字: c++ C语言 const

返回函数的引用去初始化一个新的引用这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp的别名,在c的生命周期内temp是一直有效的,这样做完全可以。

关键字: c++ 返回值 引用声明

C++是一种面向对象的高级程序设计语言,是C语言的超集。

关键字: c++ C语言

分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的

关键字: c++ class

泛型算法中的定制操作很多算法都会比较输入序列中的元素,通过定制比较动作,可以控制算法按照编程者的意图工作。本文以string排序为例进行说明,首先是缺省的排序动作: vector v{"This","

关键字: c++

为什么是lambda?讲了这么多天的lambda表达式,有一个很基本的问题没有回答:为什么叫lambda表达式呢?首先这个lambda就是罗马字母λ,lambda表达式即λ表达式。数学上有一个概念叫λ

关键字: c++

        假设我们有个函数用来揭示处理程序的优先权,另一个函数用来在某动态分配所得的Widget 上进行某些带有优先权的处理:int priority () ; void processWi

关键字: c++ effective

判断链表中是否有环最经典的方法就是快慢指针,同时也是面试官大多想要得到的答案。       快指针pf(f就是fast的缩写)每次移动2个节点,慢指针ps(s为slow的缩写)每次移动1个节点,如果快

关键字: c++ 链表 快慢指针

转载请注明出处:http://blog.csdn.net/callon_h/article/details/52073268 引子 上一篇博客从内核驱动到android app讲述了android通过

关键字: c++ java

在网上看到一段读写bmp格式图像的代码,本文对这段代码分成两个函数封装起来方便使用,一个函数是读取bmp格式的图像,一个是向指定文件写入bmp格式的图像。前提我们不需要知道这段代码是如何读取bmp格式

关键字: bmp c++
关闭
关闭