心胸决定格局,眼界决定境界...

关于预编译头文件

1.为什么需要预编译头文件呢?

原因很简单,这个其实这么做的目的就是减少编译时间。因为,如果不是这么做的话,在编译的时候,假如一个头文件被很多的文件使用,那就费时了,因为得一次又一次地进行编译。而有了预编译头文件的话,我们把出现频率很高的那部分东西(通常是一些系统的头文件或者是一些自己设定的但是不常变动的头文件)已经编译好了,就像一个通用零件一样,生成一次pch,pdb文件,其他地方实际上直接用这个编译的结果已经搞好了,用到的时候就直接装就行。这样就可以利用编译好的成果,从而能非常有效地节约编译的时间了。

2.什么情况下使用预编译头文件

    前面也有所提及,这里我自己系统地总结下:

    1)一些大型程序用这个比较好,但是一些小型的不点行的程序还是不要用预编译头文件的好,因为Create一个预编译头文件本身也是要时间的。

3.几种常见的错误用法.

 

1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)

 

原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编译速度.

 

2) 在其他的头文件里也include 预编译头文件

 

假设你的其他头文件也include了预编译头文件, 如果别人引用你的这个头文件又没有设置成预编译头文件, 那引用你头文件的这个人就煎熬了.

 

原因:由于你用到的.h文件里include了预编译头文件,他在他本身的project里,vs能够判断的出他是预编译头,也能找的到需要的pch,pdb文件。所以对写这个.h文件的人没影响。但是你作为他的客户,你工作在你的project下,你include了他的h头文件,而这时vs判断不出他的头文件里include的stdafx是预编译头文件,做普通文件编。那可想而知,他的stdafx里如果有import外面大型的库(如inventor的tlb,非常慢,我们犯了这个错),那编译速度简直是煎熬。最要命的是,以后你做任何简单的修改都要重编,这和预编译解决的问题恰好相反了。

 

4.下面给出一个使用预编译头文件的操作步骤, 享受一下预编译头文件给我们带来的编译速度的提升:

 

1) 添加一个stdafx.h文件(名字随便取, 这里用了VS默认提供的名称), 在这个.h文件里include要使用的头文件(一般是外部的库, 自己写的不常变的头文件也可以加进来)

 

2) 添加一个stdafx.cpp文件, 并include "stdafx.h"

 

3)项目属性-->c/c++-->Precompiled设置为Use Precompiled Header, stdafx.h

 

4)stdafx.cpp属性-->c/c++->Precompiled设置为Create Precompiled Header, stdafx.h

 

5.一定不要使用预编译头。  Not using precompiled headers, stdafx.h stdafx.cpp

如果有许多大量代码共享的标准头文件,则可以创建单独的文件包含它们。

eg:如果工程很大,头文件很多,而有几个头文件又是经常要用的,那么 
1。把这些头文件全部写到一个头文件里面去,比如写到preh.h 
2。写一个preh.c,里面只一句话:#include "preh.h" 
3。对于preh.c,在project setting里面设置creat precompiled headers,对于其他 
.c文件,设置use precompiled header file 

 

posted @ 2014-02-21 10:26  WELEN  阅读(1064)  评论(0)    收藏  举报