分享
 
 
 

关于预编译头

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

一、什么是预编译头?

预编译头物理上与通常的的.obj文件是一样的,但编译入预编译头的.h,.c,.cpp文件在整个编译过程中,只编译一次,如预编译头所涉及的部分不发生改变的话,在随后的编译过程中此部分不重新进行编译。进而大大提高编译速度,并便于对头文件进行管理,也有助于杜绝重复包含问题。

二、什么时候使用预编译头?

当大多.c或.cpp文件都需要相同的头文件时。

当某些代码被大量重复使用时。

当导入某些不同库都有实现的函数,并产生混乱时。

三、预编译头所涉及的编译开关及使用方法(for msvc)

1、自动预编译:由编译器决定什么时候建立和使用预编译头。

编译参数:-YX。使用此参数缺省时建立以VCxy.pch命名的预编译头文件。其中x,y是vc的版本号。可以用-Fp指定pch文件的输出路径和文件名。

比如:cl –c –YX –Fp“precomp.pch” **将在当前目录下生成precomp.pch的预编译头文件。**代表源文件。

2、手动预编译:

编译参数:

-Yc”预编译的头文件的名字” 此时缺省建立与头文件同名的预编译头文件。如要该为其他名字,可使用-Fp选项。

比如:cl –c –Yc”precomp.h” ** 将建立precomp.pch的预编译头文件。

-Yu” 预编译的头文件的名字” 表示在某个源文件时使用此预编译头,而不在进行重新编译。比如:

cl –c –Yu”precomp.h” **

注:相应预编译头必须在前面已建立过。

四、在makefile中简单的使用预编译技术

obj\i386\debug.obj: debug.c debug.h

$(CC) –Yc”precomp.h” -Fo$@ debug.c

obj\i386\OperateReg.obj: OperateReg.c OperateReg.h

$(CC) –Yu”precomp.h” -Fo$@ OperateReg.c

obj\i386\WaterMark.obj: WaterMark.c WaterMark.h

$(CC) –Yu”precomp.h” -Fo$@ WaterMark.c

以下同。

其中precomp.h为想预编译的头文件。

五、关于预编译头的一些复杂的使用方法

如:

cl -c -Yc"stuff.h" -Fplevel1.pch level1.cpp -------------(1)

cl -c -Yu"stuff.h" -Fplevel1.pch -Yc level2.cpp --------------(2)

level2.cpp的开始是这样的,其中 #pragma hdrstop 表示预编译结束,所以说代码也可以放入预编译头。

#include "stuff.h"

#include "morestuff.h"

#pragma hdrstop("level2.pch")

(1) 建立使用stuff.h 重命名为level1.pch的预编译头。

(2) 在从stuff.h建立的预编译头level1.pch的基础上,参考level2.cpp建立另一个预编译头level2.pch

此时的命名规则参见Yc无参数时的使用方法。

预编译头的其他使用细则请参考msdn。

附:

1、 预编译与guard宏

这是两个根本没有关系的概念,如果说非要找出相同的地方,那就是预编译头对控制重复包含也有一定的帮助。

#ifndef _PLOTBRUSH_

#define _PLOTBRUSH_

---

#endif // _PLOTBRUSH_

这种guard宏是防止在同一个.c文件中把同一个.h文件包含两次。

即防止出现

#include <windows.h>

#include <windows.h>

的情况的。

而预编译头相当于在全局的角度,来控制那些部分仅被编译一次的问题。

而guard宏只对当前编译单元有效。在1.c中定义了_PLOTBRUSH_对2.c是根本没影响的。

2、 98ddk中build 时,使用build –Z将只编译有改变的源文件。-c 起清除目标文件夹的作用。

如有错漏请指正。

Written by 李智勇

2003/3/21

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有