对于一个VC++初学者在‘新建’项目时,可能会有这个疑问:
‘预编译头’是干什么的?(当然在属性页 ---> 配置属性 ---> C/C++ --->预编译头 也是可以设置的)
为了解决这个问题,需要先了解这样两个文件。‘stdafx.h’ 和‘stdafx.cpp’文件。
在 win32 项目‘stdafx.h’ 文件中会存放一些必需的头文件,如其中引用了 "targetver.h"头文件等 ,"targetver.h"主要定义了程序运行需要的最低Windows版本。
在MFC项目中‘stdafx.h’ 文件中引用的头文件有:
#include <afxwin.h> // MFC 核心组件和标准组件.
#include <afxext.h> // MFC 扩展; 凡使用工具栏、状态栏的程序必须载入这个文件
#include <afxdisp.h> // MFC 自动化类
#include "targetver.h"
..........
而在‘stdafx.cpp’ 中只是 简单了引用了 ‘stdafx.h’文件。
1) 当选中‘预编译头’ 选项时, 就相当于告诉编译器,编译过‘stdafx.h’’中的内容下次就不要再进行编译了,编译后会生成一个‘stdafx.pch’文件,
第二次再编译时直接从磁盘中取出来。
之所以要这样做, 因为这些都是系统的头文件,一般是不需要修改的,重复编译会浪费大量的时间。(这种观念在 Borland C/C++ 早就有了,
MS 在vc++ 1.0 才有的)
在新建MFC项目(vs2008)中并没有这一选项,估计是系统强制选择了‘预编译头(Precompiled Header)’。
2) 还有一个问题就是,‘stdafx.cpp’’是作什么用的?
我们知道‘*.h’ 文件是无法编译的。所以必须借助于‘afxstd.cpp’ 这个源文件才能得以实现,即生成‘.pch’文件。