【转】VC++项目中stdafx.h的作用

简介: stdafx全称Standard Application Fram Extend。没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。         Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。

        stdafx全称Standard Application Fram 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表示预编译头文件。)

        5. 当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。

        VisualC++不再分析Windowsinclude文件,除非你又编缉了stdafx.cpp或stdafx.h。(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:

        1. 你编写的任何.cpp文件都必须首先包含stdafx.h。如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。

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

        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>。

        注:

        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本身没有含义,只不过构成一个响亮的口号,后来就一直沿用下来。

        5. #if _MSC_VER > 1000                      //表示版本

            #pragma once                             //避免头文件之间的相互包含

            #endif // _MSC_VER > 1000

        6. 建立了一个新的空的工程,项目中的stdafx.cpp使用的是Create Precompiled Header (/Yc),而其它.cpp是用的Use Precompiled Header (/Yu),并且Create/Use PCH Trhough File都是stdafx.h

 

原文:http://ce.sysu.edu.cn/hope/Item.aspx?id=55842 

 

目录
相关文章
|
8月前
|
编译器 C++ 开发者
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
【Conan 入门教程 】使用Conan 2.X和Autotools高效构建C/C++项目
383 1
|
8月前
|
算法 测试技术 数据处理
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
【C/C++ 面试技巧】如何在简单的项目里突出自己的价值?
187 1
|
8月前
|
算法 测试技术 开发工具
编写高效技术文档的艺术:C++项目实践指南
编写高效技术文档的艺术:C++项目实践指南
183 0
|
8月前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
261 7
WK
|
2月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
99 1
|
3月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
700 3
|
4月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
58 3
|
6月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
5月前
|
编译器 C++ 开发者
Visual Studio属性表:在新项目中加入已配置好的C++库
通过以上步骤可以确保Visual Studio中新项目成功地加入了之前已配置好的C++库。这个过程帮助开发者有效地管理多个项目中共享的库文件,提升开发效率。
136 0
|
6月前
|
Java C++ 开发者
如何根据项目需求选择使用C++还是Python进行内存管理?
【7月更文挑战第2天】如何根据项目需求选择使用C++还是Python进行内存管理?
50 0