afx.h stdafx.h以及VS项目些许思考

一、
该头文件包含一些定义与设置,为MFC提供最基本的支持,将各种松散的东西组织起来,同时为MFC类库的后续建立提供方便。一个最简单的MFC只需要afxwin.h即可,而afxwin.h开始就是#include 《afx.h》
具体来说,afx.h内容如下:
1.编译选项设置,还包括warning等的预设值
2.一些头文件:afxver_h,C相关头文件,一些win32库,包括MFC库
3.一些基本类声明,常量,全局变量,函数,以及一些typedef,类型重定义(兼容性等等),还有诊断函数支持,。还包括一些方便诊断的宏(由于MFC的严谨性,afx.h中提供了大量方便其他MFC头文件的宏等)

二、afx.h 与 stdafx.h区别

stdafx.h为预编译头文件:

#include <afxwin.h> 
#include <afxext.h> 
#include <afxdisp.h> 
#include <afxdtctl.h> 
#include <afxcmn.h> 


stdafx.cpp 中的内容: 
#include "stdafx.h" 

创建MFC工程会自动生成stdafx.h预编译头文件以及stdafx.cpp

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

创建项目可使用预编译头技术,大大提高编译速度~

三、afx.h中的一些typedef
typedef int BOOL C99新增标准

  • 刚开始的C标准没有bool型,使用这种方法支持bool型
  • 32位机器以4字节对齐效率最高
  • 增强函数逻辑可读性
  • 0为FALSE,1为TRUE 而bool 0为假,非0为真

四、在VS中建立筛选器

使用vs2010开发项目时,有时源码文件过多,想按功能进行分类管理,这个时候就可以使用“筛选器(filter)”。

添加筛选器很简单,在项目上右键单击,选择“添加 | 新建筛选器”,然后命名就可以了。之后向筛选器中添加文件。创建筛选器之后,要注意工程目录下的“*.filters”文件一定不能删掉,因为这个文件就是用来记录筛选器的。

创建筛选器可以提高效率,虚拟可视化分类资源(项目文件的虚拟目录)

可以通过*.filters工程文件修改筛选器配置,修改 /CiInclude 包含头文件,以及 /ClCompile 修改.cpp文件等

五、VS工程生成文件简析

sln是解决方案的配置,主要是管理这个方案里的多个vcxproj
vcxproj是工程的配置文件,管理工程中细节比如包含的文件,引用库等
一般没有sln,也可以直接打开vcxproj,也可以重新生成sln
sln里有多个工程,当你移除某个工程时sln会有变化,sln并不是太重要

…初入江湖,路在脚下

猜你喜欢

转载自blog.csdn.net/gaoyz1/article/details/80032842