码迷,mamicode.com
首页 > 编程语言 > 详细

C++预编译头文件:stdafx.h

时间:2015-11-27 12:43:33      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

  其实在我们的生活中,很多东西都是这样,出现一次两次,而往往被我们忽略。碰见多次,终有一天被我们注意到,然后想弄个明白。又或许是注意到了,然而也并没有要去弄个明白的心。终有一天它给你困惑,而不得不去弄明白。不管stdafx.h你有没有注意到,不管stdafx.h有没有给你困惑,现在我们就来了解一下预编译头。

 

什么是预编译头

  预编译头(precompiled header)是程序设计时把头文件编译为中间格式,以节约在开发过程中编译器反复编译该头文件的开销。——来自《维基百科》

  可见预编译头的意义就是:防止反复编译某一个头文件

 

为何会有预编译头

  比如有的头文件包含了巨量的源代码(比如windows.h),如果每一个cpp都包含这个头文件,那么就会导致编译过程非常慢,因为不仅大,而且还要被编译多次。于是呢,有了预编译头技术。把几乎所有cpp都会包含的一堆头文件提取出来放到一个地方,比如stdafx.h中,并在编译工程时,最先编译stdafx.cpp,然后就生成了一个中间文件:.pch,所有cpp都可以使用的文件。你可以看看你的工程所在目录的Debug/Release里面,是否有一个.pch的文件?这就是编译之后的预编译头。也许你以前看到.pch文件,不知道这是啥,现在明白了吧?你看看这文件的大小,10M以上~一个字:硕大无比!应该是工程文件中最大的文件了。

 

预编译文件的特征

  但是你想想,如果这些被预编译的文件是经常会被修改的,那么是不是就失去了预编译的意义了?所以这些预编译的文件都必须是稳定的,不经常被修改的。

 

预编译头的使用

  技术分享

  创建工程的时候,vs默认情况下都会创建:stdafx.h和stdafx.cpp。那么就在stdafx.h中添加工程需要的各种头文件,而在stdafx.cpp中,就只要stdafx.h就可以了。当我们编译时,会默认从stdafx.cpp开始编译,生成.pch文件。当编译其他cpp时,会把.pch文件加载到内存中,当然其他的cpp都必须#include"stdafx.h"。其实.pch中,包含了的是到#include"stdafx.h"这一行为止的所有代码编译结果,而我们往往把#include"stdafx.h"放在cpp的第一行。技术分享打开cpp的属性,可以看到下面的配置:

  技术分享

  可以尝试改改配置,看看编译时间会不会变慢。

 

  PS:stdafx中的AFX代表Application Framework eXtensions。AFX是Microsoft Foundation Classes(MFC)的旧称。

  最后,欢迎大家评论&交流,谢谢。

C++预编译头文件:stdafx.h

标签:

原文地址:http://www.cnblogs.com/LuckyAnnika/p/5000146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!