stdafx.h、stdafx.cpp两个文件的作用

stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h?

这两个文件用于建立一个预编译的头文件.PCH和一个预定义的类型文件STDAFX.OBJ。

由于MFC体系结构非常大,包含许多头文件,如果每次都编译的话比较费时。因此,我们把常用的MFC头文件都放在stdafx.h中,如afxwin.h、afxext.h、afxdisp.h、afxcmn.h等,然后让stdafx.cpp包含这个stdafx.h文件。这样,由于编译器可以识别哪些文件已经编译过,所以stdafx.cpp就只编译一次,并生成所谓的预编译头文件(因为它存放的是头文件编译后的信息,故名)。

如果读者以后在编程时不想让有些MFC头文件每次都被编译,也可以将它加入到stdafx.h中。采用预编译头文件可以加速编译过程。

Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。

为避免这种浪费,AppWizard和Visual C++编译程序一起进行工作,如下所示:

1.AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFC include文件。且这一文件可以随被选择的选项而变化。

2.AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。

3.然后AppWizard就建立起工程文件,这样第一个被编译的文件就stdafx.cpp。     4.当Visual C++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。 (扩展名pch表示预编译头文件。)

5.当Visual C++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。 Visual C++不再分析Windows include文件,除非你又编缉了stdafx.cpp或stdafx.h。

在这个过程中你必须遵守以下规则:

◎你编写的任何.cpp文件都必须首先包含stdafx.h。

◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h (后部)上,然后预编译stdafx.cpp。

◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。 如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立

时间: 2024-10-11 01:14:52

stdafx.h、stdafx.cpp两个文件的作用的相关文章

c++ *.h和*.cpp在编译中的作用

首先,我们可以将所有东西都放在一个.cpp文件内.然后编译器就将这个.cpp编译成.obj,obj是什么东西?就是编译单元了. 一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话,就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上就可以分别放在一个单元,也就是cpp里面)那么就是一个.cpp对应一个.obj,然后将所有的obj链接起来(通过一个叫链接器的程序),组成一个.exe,也就是程序了. 如果一个.cpp要用到另一个.c

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

其实在我们的生活中,很多东西都是这样,出现一次两次,而往往被我们忽略.碰见多次,终有一天被我们注意到,然后想弄个明白.又或许是注意到了,然而也并没有要去弄个明白的心.终有一天它给你困惑,而不得不去弄明白.不管stdafx.h你有没有注意到,不管stdafx.h有没有给你困惑,现在我们就来了解一下预编译头. 什么是预编译头 预编译头(precompiled header)是程序设计时把头文件编译为中间格式,以节约在开发过程中编译器反复编译该头文件的开销.——来自<维基百科> 可见预编译头的意义就

stdafx.h简介

stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展). 简介 所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H.Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果.这样可以加快编译速度,节省时间. 预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是"pch",所以编译结果文件是pr

VC++2013出现bug: 无法打开源文件“stdafx.h”

VC++2013出现bug: 无法打开源文件“stdafx.h” 1.首先需要把#include "stdafx.h"置于最头 2.在解决方案资源管理器中添加以下几个文件(附图下) 3.文件的内容分别为 ①.targetver.h #pragma once // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台. // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将// WIN32_WINNT 宏设置为要支持的平台,然后

JQuery 下jquery-1.4.2.js和jquery-1.4.2.min.js这两个文件有什么区别 转

转自http://blog.163.com/[email protected]/ " 两个文件的作用是完全一样的. jquery-1.4.2.js里的代码是没有进行处理的原代码,适合于人们阅读与研究. jquery-1.4.2.min.js里的代码进行过特殊的处理,如变量的名称基本都写成一个字母,而且格式缩进都被删除了. 所以文件容量比较小(min),一般在网页中调用这个文件. 可以看作:jquery-1.4.2.min.js是jquery-1.4.2.js的编译版本 "

gcc 将两个文件合成一个文件(c)

一个文件是: 一个文件是: 两个文件的作用是输出一段文字,其中一个文件调用了另一个文件 gcc 命令为: -c 生成了object 文件,-o 生成了可执行文件,并且合成. 原文地址:https://www.cnblogs.com/zijidefengge/p/12244487.html

解决VS2010子目录中的.cpp文件引用上一级目录的stdafx.h找不到定义的问题

Source目录 |-- stdafx.h |--Util目录 |--Util.h |--Util.cpp 现在的发现Util.cpp各种变量的定义全是红色波浪线,找不到定义,但是却能够编译过 问题就出在Util.cpp中的第一行 #include "stdafx.h" 其实该路径是查找不到对应文件的,因此要将stdafx.h引入到工程当中来,具体方法是: Properties -> Configuration Properties -> C/C++ -> Gener

Visual Studio 2010中的stdafx.h和targetver.h两个头文件是有什么用?

来自百度~stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行. Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作.由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了. 为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示: ◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文

C++预编译头文件(#include &quot;stdafx.h&quot;)

来源:http://blog.sina.com.cn/s/blog_4ac766c00100qsbd.html http://blog.csdn.net/txh0001/article/details/7031058 作为一个C++菜鸟,在预编译头文件(#include "stdafx.h")上纠结了很久,今天打算彻底弄明白它. 1.预编译头文件的概念 所谓的预编译头文件,其实我们很熟悉的,这里的头文件(Microsoft Visual C++中)一般的说就是我们常见的stdafx.h