头文件介绍
头文件一般为.h文件,包含结构体声名(struct)、宏定义(define)和函数声名等,实现函数的代码则写在.c或.cpp的源文件中。如果函数或结构体包含了对其他头文件的引用,也应在.h文件中列出。
编译时,当编译器扫描到一条函数调用语句时首先应当知道该函数的原型或定义,函数原型一般都放在头文件中,函数定义则放在源文件中。当源文件或头文件通过#include指令包含另一个头文件的时候,编译预处理器用头文件的内容取代#include伪指令。这就是说,头文件的所有内容最终都会被合并到某一个或某几个源文件中,如此将每一个包含的头文件递归地展开后形成的源文件就叫编译单元。
头文件格式
为了避免因为重复引用而导致的编译错误,头文件常具有
#ifndef LABEL
引用头文件
引用头文件的#include 语句有两种格式
1. 到存放C库函数头文件所在的目录中寻找被包含文件。
2. 先到当前目录的相对路径中寻找被包含文件,如果没有,再以上面所述的方式查找。
resource.h 和 stdafx.h
当需要使用资源时,应该包含resource.h头文件,它定义了资源ID等信息。
stdafx.h 是预编译头文件(Standard Application Fram Extend),没有函数库,只是定义了一些环境参数,使得编译出来的程序能在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。
在这个过程中必须遵守以下规则:
◎编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。 如果想关闭预编译功能,可在工程属性中找到是否使用预编译的选项。