关于#include "stdafx.h"

本文详细介绍了预编译头文件stdafx.h的作用及其在Visual C++中的应用过程。解释了如何通过预编译头文件提高编译速度,并讨论了stdafx.h文件的结构及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


(2)stdafx.h文件中包含了一些必要的头文件(如afxwin.h),对应于stdafx.h有一个stdafx.cpp文件,该文件内包含一句: #include "stdafx.h",其作用是令编译器编译出一个stdafx.obj预编译头文件(pre-compile header,需要设置编译选项),在下次编译时以降低总的编译时间。若使用ClassWizard定义新类,则有可能在stdafx.h中增加新的 include files。比如,若选用MFC template classes,stdafx.h中便会增加:#include <afxtempl.h>。


(3)注:1.afxwin.h是MFC编程的必需文件,其中包含如CString,CEdit类运行所必需的头文件,最好保证该句在头文件首行;它还会调用windows.h,改头文件包含有数据类型的定义、API入口点定义和其它有用的参数信息;
2.非MFC工程使用MFC库时最常见的问题就是windows.h重复包含错误:fatal error C1189: #error :  WINDOWS.H already included.  MFC apps must not #include <windows.h>;

3.#define WIN32_LEANAND_MEAN,在windows的头文件中拒绝接受MFC类库,以加速编译时间;
4.afx - afx中的af指的是Application Frame的缩写,曾经有一个技术开发团队专门作Application Frame,后来给这个团队命名用afx,x本身没有含义,只不过构成一个响亮的口号,后来就一直沿用下来。


(4)stdafx是预编译头文件。你可以从VC++集成环境菜单Project/Settings...中
Project Settings Dialog/C/C++/Category:Precompiled Headers/Use precompiled header file(.pch)的Check Box中看到。已经将Stdafx.h文件作为预编译的头文件来使用。预编译头文件是在编译所有Code之前,首先进行的动作。通过解析这个文件,取得定义的结构和参数。这样就不用在编译每个文件时都重新进行解析。提高编译速度。stdafx.h这个名称是可以改变的,你可以指定预编译头文件的名称。这个只在vc中有用,并不是c++的特性,vc中可以在这里声明全局变量和ID的地方
 

### StdAfx.h 头文件的使用与含义 StdAfx.h 是一个在 C++ 开发中常见的头文件,主要用于预编译头文件(Precompiled Headers, PCH)机制。它的主要作用是优化大型项目的编译速度[^1]。通过将一些常用的、不会频繁修改的头文件(如 `windows.h`、`stdio.h` 等)包含在 StdAfx.h 中,可以让多个源文件共享这些预编译的头文件内容,从而避免重复编译相同的代码。 #### 1. StdAfx.h 的作用 StdAfx.h 文件通常用于包含那些在整个项目中频繁使用的头文件。例如,在 Windows 平台上开发的应用程序可能需要频繁使用 `windows.h` 和其他标准库头文件。如果每个 `.cpp` 文件都单独包含这些头文件,会导致编译器重复解析和处理相同的代码,从而增加编译时间。通过使用 StdAfx.h 和预编译头文件机制,可以显著减少编译时间[^3]。 #### 2. 预编译头文件的工作原理 预编译头文件的核心思想是将 StdAfx.h 中的内容编译成一个二进制文件(通常是 `.pch` 文件)。这个 `.pch` 文件可以在后续的编译过程中被复用,而不是重新解析 StdAfx.h 中的内容。具体来说: - 在 Visual Studio 中,通常会有一个名为 StdAfx.cpp 的文件,其内容仅为 `#include "StdAfx.h"`。 - 编译 StdAfx.cpp 时,会生成一个 `.pch` 文件。 - 其他 `.cpp` 文件通过包含 StdAfx.h 来使用这个预编译头文件[^4]。 #### 3. 如何在项目中添加 StdAfx.h 在 Visual Studio 中创建新项目时,通常会自动配置预编译头文件功能,并生成 StdAfx.h 和 StdAfx.cpp 文件。如果需要手动配置,可以按照以下方式操作: - 打开项目的属性页(右键项目 -> 属性)。 - 在“配置属性” -> “C/C++” -> “预编译头”中设置: - **预编译头**:选择“使用 (/Yu)”。 - **预编译头文件**:指定为“StdAfx.h”。 - 对于 StdAfx.cpp 文件,将其“预编译头”设置为“生成预编译头 (/Yc)”[^4]。 #### 4. 注意事项 - 如果 StdAfx.h 文件的内容发生更改,整个项目可能会重新编译,因为预编译头文件的内容已经改变[^1]。 - 不建议将频繁修改的头文件包含在 StdAfx.h 中,否则会失去预编译头文件带来的性能优势。 - 在某些情况下,如果项目不需要预编译头文件,可以选择禁用该功能(在属性页中将“预编译头”设置为“不使用预编译头”)[^4]。 ```cpp // 示例 StdAfx.h 文件内容 #pragma once #include <windows.h> #include <stdio.h> #include <string> ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值