C++ 中stdafx.h

本文介绍了如何通过预编译头文件技术加快编译速度,包括AppWizard如何辅助设置预编译头文件,以及如何正确使用预编译头文件以减少编译时间。

Standard Application Fram Extend
没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。

Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。
◎AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windowsinclude文件,除非你又编缉了stdafx.cpp或stdafx.h。
这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
◎你编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。

C++开发中,特别是在使用Microsoft Visual C++进行开发时,`stdafx.h`文件起到了**预编译头文件**的作用。其主要目的是提高编译效率,尤其是在项目中包含大量不变的头文件(如Windows API或MFC头文件)时[^2]。 ### 编译优化机制 当项目中使用了`stdafx.h`时,Visual C++会首先编译`stdafx.cpp`,该文件唯一的作用是包含`stdafx.h`。编译器会将`stdafx.h`中包含的所有头文件的预处理结果保存为一个预编译头文件(通常是`stdafx.pch`)。之后,所有其他`.cpp`文件在编译时只需加载这个预编译头文件,而无需重新解析那些重复的头文件内容[^1]。 ### 使用规则 - 每个`.cpp`文件必须在最开始处包含`#include "stdafx.h"`,否则将导致编译错误。 - 如果某些头文件被多个源文件频繁包含,可以将它们添加到`stdafx.h`中,以进一步提高编译效率。 - 预编译头文件(`.pch`)是项目中体积最大的中间文件之一,若磁盘空间有限,可以在不需要时删除它,但会在下次编译时自动重建。 ### 示例:stdafx.h内容 ```cpp // stdafx.h : 标准系统包含文件的包含文件, // 或者是经常使用但变化不大的项目特定的包含文件。 #pragma once #include <afxwin.h> // MFC 核心组件和标准组件 #include <afxext.h> // MFC 扩展 #include <afxdtctl.h> // 支持 MFC 对话框中的通用控件 #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC 对 Windows 公共控件的支持 #endif // _AFX_NO_AFXCMN_SUPPORT ``` ### 优势与适用场景 - **优势**:显著减少编译时间,尤其是大型项目中。 - **适用场景**:适用于包含大量不变头文件的项目,如使用MFC、ATL或Windows SDK的项目。 ### 注意事项 - 若修改了`stdafx.h`或`stdafx.cpp`,则所有依赖它的源文件都需要重新编译。 - 在某些轻量级项目或跨平台项目中(如使用Qt),通常不会使用`stdafx.h`,而是通过构建系统(如qmake)管理头文件包含[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值