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


    其实在我们的生活中,很多东西都是这样,出现一次两次,而往往被我们忽略。碰见多次,终有一天被我们注意到,然后想弄个明白。又或许是注意到了,然而也并没有要去弄个明白的心。终有一天它给你困惑,而不得不去弄明白。不管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)的旧称。

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

  • 相关阅读:
    014 停止进程
    014 创建进程的函数使用
    014 进程 获取当前目录 获取当前文件搜在目录 获取环境变量
    013 Windows进程及线程
    012 CopyFile
    011 异步I/O处理 003
    010 异步I/O处理 002
    MVVM
    ORM
    MVC
  • 原文地址:https://www.cnblogs.com/LuckyAnnika/p/5000146.html
Copyright © 2020-2023  润新知