`
xinklabi
  • 浏览: 1587810 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

stdafx.h作用及原理

阅读更多

刚刚用VS测试发现,include"stdafx.h"后可以不用include<iostream> using namespace std;了,这验证了本文最后红色的那几段话。不知道"stdafx.h"是怎么选择包含其它头文件的,是最常用的?貌似,还可以在它里面添加新的头文件,这些为什么没有被自动包含进来?在项目的debug里面,我发现了projectname.pch文件,有1M大。(有的程序必须在stdafx.h里面声明 include<iostream> using namespace std;才可以)

 

又在新的程序里测试,好像必须在stdafx.h里面声明 include<iostream> using namespace std;才可以

 

名称的英文全称为:Standard Application Framework Extensions

  所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

  预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。

  编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。

  因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。

  详细工作原理及作用

  stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在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文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。

  如何理解其原理

  通俗一点说

  当我们使用AppWizard来自动生成某些项目的时候,系统会自动把所需要include的头文件在stdafx.h中先include一下,这样,我们只需要直接include这个stdafx.h文件即可.因为同一个项目中的不同源文件CPP都包含相同的include文件,这样,为每个.CPP文件都重复include这些文件就显得很傻了。当然如果你不用MFC的话就不用了。即:在每个.cpp文件中都include stdafx.h 就相当于包含了其他的如iostream.h等文件

  与stdio.h的区别

  我们一般用TC或vc编译C程序的时候都要首先包含这个stdio.h头文件,这个头文件里面包含了scanf和printf函数的定义,如果我们不在程序开头include这个文件,那么你调用上面这两个函数就不会成功,它其实和c++中的iostream.h文件的作用差不多的,它们一般都已经在stdafx.h文件中被包含。

分享到:
评论

相关推荐

    stdafx.h头文件探秘

    #### 二、`stdafx.h`的作用及工作原理 `stdafx.h`的全称是“Standard Application Framework Extensions”,顾名思义,它主要用作标准应用程序框架的扩展。通常情况下,`stdafx.h`包含了一些常用的预编译头文件(如...

    头文件stdafx.h

    下面我们将深入探讨`stdafx.h`的作用、原理以及如何使用。 首先,`stdafx.h`的"std"前缀通常代表“标准”,而"afx"是MFC(Microsoft Foundation Classes)库的一部分,用于Windows应用程序开发。MFC库是微软提供的...

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

    在C++编程环境中,预编译头文件`stdafx.h`是一个常见的概念,特别是在使用Microsoft Visual Studio等IDE时。这个头文件的主要目的是为了提高编译效率,通过预编译一些经常改变但不常重新编译的代码,从而减少编译...

    MFC中的stdafx.rar_MFC

    在Microsoft Foundation Class (MFC)库中,`stdafx.h`是一个非常关键的头文件,它在MFC应用程序中起着核心作用。这篇文章将深入探讨`stdafx.h`在MFC中的功能,以及它如何影响和优化编译过程。 首先,`stdafx.h`的...

    C语言--贪吃蛇相关PPT(详细介绍相关贪吃蛇过程及问题).pptx

    6. AppWizard和Visual C++的工作原理:AppWizard建立了文件stdafx.h,包含了所有当前工程文件需要的MFC include文件。然后,AppWizard建立了stdafx.cpp文件,并将结果保存在一个名为stdafx.pch的文件里。 7. 宏定义...

    为什么要知道.rar加#include stdafx_h_百度

    理解`#include "stdafx.h"` 的作用对于编写有效且高效的C++代码至关重要。 首先,`stdafx.h` 文件的主要目的是为了提高编译速度。当项目变得庞大时,包含许多源文件,每次编译都需要处理大量的头文件,这可能导致...

    局域网聊天软件源代码包括语音聊天java

    - **ifndef \_\_AFXWIN\_H__**:这是一个条件编译语句,用于确保`stdafx.h`已经被包含。这是为了生成预编译头文件(Precompiled Header, PCH),从而加快编译速度。 - **DECLARE_MESSAGE_MAP()**:这是MFC...

    DES加密(mfc)

    `StdAfx.h`包含了一些常用的头文件,如`AFXWIN.h`,而`StdAfx.cpp`则包含这些头文件的预编译版本,以减少编译时间。 **文件列表总结** - `DES.APS`:这是MFC工程的编译中间文件,不包含源代码。 - `DES.clw`:...

    想制做超cool图形界面吗用它吧。(18KB)

    2. `StdAfx.cpp`和`StdAfx.h`:这两个文件通常在Visual C++项目中使用,`StdAfx.cpp`编译预编译头文件`StdAfx.h`,以提高编译效率。`StdAfx.h`可能包含了常用的库引用和宏定义。 3. `rgndemo.dsp`和`rgndemo.dsw`:...

    yuv源码解读.pdf

    预编译头文件`stdafx.h`在C++中起着关键作用,尤其是对于大型项目,它可以提高编译速度。`#pragma once`预编译指令确保头文件只被编译一次,避免了重复包含导致的编译错误。在`stdafx.h`中,我们通常看到包含如`...

    yuv源码解读.docx

    本文将围绕“YUV源码解读.docx”文档中的内容,深入解析预编译头文件(如`stdafx.h`)以及相关的预处理指令,帮助读者理解其工作原理和实际应用。 首先,我们关注`stdafx.h`文件。它是Microsoft Visual C++(VC++)...

    dss.rar_DSS数字签名_dss_pdf签名_数字签名_数字签名 代码

    压缩包内的文件名称列表包括:dss.clw、big.cpp、dss0.cpp、dss.cpp、StdAfx.cpp、dss.dsp、dss.dsw、big.h、StdAfx.h、Resource.h。这些文件可能是以下内容: - dss.clw:可能是一个项目的类库文件,记录了项目中类...

    解决fatal error C1010 unexpected end of file while looking for precompiled header

    这个错误通常出现在尝试使用预编译头文件(stdafx.h)时,但编译器在源代码中找不到相应的#include指令。下面我们将详细解析这个问题的原因、解决方案以及如何预防此类问题。 首先,预编译头文件(如`stdafx.h`)是...

    DSound_Spectrum_Src.zip_DSound_Spectrum_c++ spectrum

    1. stdafx.cpp:通常包含预编译头文件(如stdafx.h),用于提高编译速度。 2. small.ico:可能是应用程序的图标资源。 3. MyDirectSound.cpp:这是主要的源代码文件,可能包含了DirectSound的实现,包括音频播放和...

    终于搞懂了,预编译头文件

    - `StdAfx.cpp`文件负责生成预编译头文件,其内容仅为`#include "StdAfx.h"`。 - 在项目设置中,需要配置`StdAfx.cpp`的预编译头文件生成选项,以及其他C源文件的预编译头文件使用选项。 综上所述,预编译头文件是...

    实现VC界面的类CControlBar

    【包含sizecbar.h sizecbar.cpp scbarg.h scbarg.cpp 四个文件及CoolTabCtrl.cpp CoolTabCtrl.h】 一、实现原理 图中两个窗口的实现类是从CControlBar派生出来的,我们并不需要从头到尾实现该类,因为Cristi Posea...

    Base64加解码vc++源码

    这个压缩包包含了四个文件:BASE64.cpp、StdAfx.cpp、StdAfx.h和BASE64.h,这些都是开发C++程序时常见的文件。 1. **BASE64.cpp**:这个文件通常包含Base64编码和解码的函数实现。在Base64中,每3个字节(24位)的...

    SSTF.rar_9L9

    - "Sd.cpp"和"StdAfx.cpp"是C++源代码文件,"Sd.cpp"可能包含了主要的程序逻辑,而"StdAfx.cpp"通常包含了预编译的头文件(StdAfx.h)的内容,以提高编译速度。 - "Sd.dsp"和"Sd.dsw"是Visual Studio的项目文件,...

    CKD.rar_crc

    3. StdAfx.cpp 和 StdAfx.h:在Visual C++项目中,这些文件通常用于预编译头文件,以提高编译效率。 4. 7CRCfile.dsp 和 8CRCfile.dsw:这是两个旧版的Microsoft Visual Studio项目文件,分别对应于Visual Studio 6...

    VC++ WinSocket接收电子邮件 email

    3. **StdAfx.cpp** 和 **StdAfx.h**:这两个文件与预编译头文件有关,可以提高大型项目的编译速度。`StdAfx.h`包含了项目常用的一些头文件,而`StdAfx.cpp`则是预编译这些头文件的实现。 4. **pop3connection.dsp**...

Global site tag (gtag.js) - Google Analytics