文档章节

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

DDwang
 DDwang
发布于 2015/07/29 09:16
字数 687
阅读 230
收藏 1

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文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立


© 著作权归作者所有

DDwang
粉丝 4
博文 16
码字总数 56842
作品 0
海淀
程序员
私信 提问
afx.h stdafx.h以及VS项目些许思考

一、 该头文件包含一些定义与设置,为MFC提供最基本的支持,将各种松散的东西组织起来,同时为MFC类库的后续建立提供方便。一个最简单的MFC只需要afxwin.h即可,而afxwin.h开始就是#include ...

gaoyz1
2018/04/21
0
0
关于预编译和宏定义部分说明

From: http://www.neu.edu.cn/cxsj/pointchart/c11/index.html #pragma指令 TAG:预编译和宏定义,ANSI C,# pragma TEXT: 其语法格式如下: # pragma token-sequence 此指令的作用是触发所定义的......

AlphaJay
2010/04/19
598
0
关于预编译头stdafx.h

现有一个工程,工程文件,头文件,源文件分别在不同的目录(build、include、src),stdafx.h与stdafx.cpp在src文件夹下,另外又有一个cpp文件(在src的子文件夹下),该cpp开头#include“stdaf...

reme
2014/05/07
148
0
在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?

在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译头 错误描述:fatal error C1010: 在查找预...

simpower
2018/07/12
40
0
fatal error C1010: unexpected end of file while...

在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive 的错误. 解决方法: 1、如果发生错误的文件是由其他的C代码文件添加进入当...

Mr&Cheng
2013/01/20
35
0

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
40分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
6
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
1
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部