为什么包含#include "stdafx.h "

许多初学   VC   的朋友也许都为那么一个问题困扰过:

           为什么所有的   cpp   都必须   #include    "stdafx.h "

             也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底
是为什么呢?预编译头有什么用呢?

           这得从头文件的编译原理讲起。其实头文件并不神秘,它的全部作用,就是把自己的
所有内容直接“粘贴”到相应的   #include   语句处。如果不相信的话,不妨做个实验,将
一个   cpp   中的所有   #include   语句删掉,并将它包含的文件粘贴到相应的位置,你会发
现,文件的编译和运行都完全没有受到影响。其实,编译器在编译你的程序的时候,所做
的第一件事,也就是展开所有的   #include   语句和   #define   语句。

头文件的出现,固然给书写程序带来了很大方便。可是到了 Windows 时代后,慢慢
就呈现出一些问题了。几乎所有的   Windows   程序都必须包含   windows.h,而那个文件却
硕大无比,将它展开后往所有文件中一粘贴,编译的时候立刻慢得像只蜗牛。

           到了   MFC   时代后,情况更为恶劣了。毕竟   C   风格的   Windows   头文件里面包含的还
仅仅是函数定义和宏,编译难度不算太大,而   MFC   库里面的头文件可都是类声明啊!更
何况,一个最简单的工程,都会生成大量的类,需要用到大量的函数。如果工程稍微复杂
一些,编译难度可想而知!

           但是,人们惊奇地发现,虽然用到的头文件又多又杂,但是在一个工程中,总有那么
一堆头文件,是几乎所有   cpp   都必须包含的。那么,可不可以把这些头文件提取出来,
只编译一编,然后所有其它   cpp   就都能使用呢?没错,这就是预编译头的思想都由来!

           实践证明,使用了预编译头技术后,编译速度大大提高了。可以到你的工程目录下的
Debug   或   Release   目录中看一看,里面有一个体积极为硕大的   .pch   文件,那就是传说
中的“编译之后的预编译头”。

           使用了预编译头技术后,虽然带来了极大地方便,但也造成了一个问题:由于它假定
预编译头中包含过的头文件会在所有   cpp   中使用,因此它在编译你的   cpp   的时候,就会
将预编译头中已经编译完的部分加载到内存中。如果它突然发现你的   cpp   居然没有包含
预编译头,它就会很郁闷,因为它不知道该如何将已编译完的部分从内存中请出去,整个
编译过程就会失败。

           因此,如果你使用了预编译头技术,就必须在所有的   cpp   中包含预编译头。MFC   工
程中为你建立了一个默认的预编译头   stdafx.h,如果你愿意,也可以在自己的工程中使
用其它文件名作为你的预编译头,如果你觉得有必要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值