C++预编译头文件简介
扫描二维码
随时随地手机看文章
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 文件,编译一下就可以了。