预编译头引发的思考

上传人:飞*** 文档编号:53907994 上传时间:2018-09-06 格式:PDF 页数:3 大小:392.98KB
返回 下载 相关 举报
预编译头引发的思考_第1页
第1页 / 共3页
预编译头引发的思考_第2页
第2页 / 共3页
预编译头引发的思考_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《预编译头引发的思考》由会员分享,可在线阅读,更多相关《预编译头引发的思考(3页珍藏版)》请在金锄头文库上搜索。

1、1 / 3预编译头文件带来的问题和对策郭宇 所谓预编译头,就是把头文件事先编译成一种二进制的中间格式,供后续的编译过程使用。预编译头物理上与通常的的.obj 文件是一样的,但是千万不要把这个中间格式与. o/.obj/.a/.lib的格式混淆, 他们是截然不同的!所以预编译头文件的特性和目标文件也不同(尽管他们都属于某种中间文件)。编译入预编译头的.h,.c,.cpp 文件在整个编译过程中,只编译一次,如预编译头所涉及的部分不发生改变的话,在随后的编译过程中此部分不重新进行编译。进而大大提高编译速度,并便于对头文件进行管理,也有助于杜绝重复包含问题。 但也有类似的地方的,比如,它们都是编译器之

2、间不兼容的_,就是说你不能把VC生成的预编译头拿到GCC上去用。甚至扩展名都不一样,VC 的是大家都熟悉的. pch,而 GCC的,是 .gch。 -以上摘自百度百科本文不仅仅是预编译头问题,更重要的是对于一般化的cpp 源代码目录组织的思考和探索。如果你使用的编译器是MSVC,不论是什么版本(VC6-VC2012 ) ,对于源代码工程目录的组织都会很头疼。 如果源代码 .h .cpp 文件多大上千个你还会不会把他们都放在同一个目录呢?当然不会,但是VisualStudio 可不同意。首先是对头文件的引用。对于上面这个用应用程序向导创建的MDI 程序来说,源代码有几十个文件了,你可以通过新增“

3、筛选器”来对他们归类。2 / 3嗯,这样好多了。但是物理文件呢?还是如此。所以我们需要对其分目录管理。假设我们需要为对象按照继承关系分类建立目录。继承关系是: objects-people-user objects.h people.h user.h 分别保存在这三个文件夹中3 / 3你会通过添加现有项把这些文件添加进工程。但是,在 cpp 文件中该怎么包含这些头文件呢?比如你要在MFCApplication1Doc.cpp文件中使用user 类,所以要包含user.h 文件。#include “user.h“显然这样编译器是找不到该文件的。你得这么写:#include “objects/pe

4、ople/user/user.h“那么对于user.cpp 文件呢?#include “user.h“就可以了看来还不错!如果你开启了预编译头文件:请不要忘记,所有cpp 文件都要包含 : #include“stdafx.h“ 这么一句否则就会报错按照上面的理论user.h中这么写时找不到该文件的。事实也是如此。这么行不行?#include“/stdafx.h“ 按照上面的理论就是这样,不过VisualStudio 可不同意。这个要问问微软了O(_)O。可见他的算法是直接找字符串#include“stdafx.h“是否存在,非确认stdafx.h 真的被包含。这样吧,让cpp 里面还是保持#include“stdafx.h“ 同时在每个目录中增加一个stdafx.h文件,类似于做接力,内容很简单都是#include“/stdafx.h“ 问题终于解决了!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号