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

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

 

什么是预编译头

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

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

 

为何会有预编译头

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

 

预编译文件的特征

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

 

预编译头的使用

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

创建工程的时候,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的第一行。C++预编译头文件:stdafx.h打开cpp的属性,可以看到下面的配置:

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

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

 

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

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

原文链接: https://www.cnblogs.com/LuckyAnnika/p/5000146.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/224993

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午12:39
下一篇 2023年2月13日 下午12:39

相关推荐