21天学通C++(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.3 文件包含

除了6.2节介绍的宏定义外,文件包含是C++预处理程序的另一个重要功能。文件包含是指一个C++源程序中将另一个C++源程序包含进来,通过#include预处理指令实现。

6.3.1 #include命令

C++中,#include被称为文件包含命令,其意义是把尖括号< >或引号“”内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h。因此也被称为头文件或首部文件。

C++的头文件中包括了各个标准库函数的函数原型,因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文件。例如,要在C++程序中使用流输入/输出命令cin和cout,就必须包含iostream.h头文件,要使用printf和scanf输入/输出语句,则必须包含stdio.h头文件。头文件包含的库函数不要求读者都记住,只需熟悉几个常见库函数所在的头文件即可。

简单来说,文件包含命令行的一般形式为:

或者

注意

#include包含命令后的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的:

但是这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。了解了上述内容后,用户在编程时可根据自己文件所在的目录来选择某一种命令形式。

文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写公用量,从而节省时间,并减少出错。

读者在使用#include文件包含命令时要注意如下两个事项:

●一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。

●文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。

6.3.2 合理使用文件包含

在实际开发软件时,需要多个人构成的小组共同完成代码的编写与测试,因此需要借鉴和应用其他的结果,这就需要用到文件包含了。

简单来说,文件包含的作用是在系统编译之前,将包含文件中的内容复制到当前文件的当前位置之后,再进行编译。

【范例6-12】文件包含的实现。该范例定义了两个C++程序file1.cpp和file2.cpp,在file2.cpp中需要用到file1.cpp中的函数,因此需要在file2.cpp中将file1.cpp包含进来,其实现代码如代码清单6-12所示。

代码清单6-12

【运行结果】读者可以看出,上述代码的功能是求两个数之和,其中求和的函数放在file1.cpp文件中,而主函数main()则在file2.cpp文件中,该程序段执行结果如图6-14所示。

图6-14 文件包含

【范例解析】在上述示例中,在编译file2.cpp的时候,系统根据#include "file1.cpp"指令将file1.cpp的内容复制到当前文件的当前位置,所以在file2.cpp可以直接使用double Add(double a,double b)函数。

提示

一般来说,在软件开发中将符号常量、全局变量、函数声明包含在头文件(.h文件)中,并将其定义放在.cpp文件中。然后在使用的时候,包含对应的头文件即可。

如果在程序中需要使用数学库函数,在文件中加入如下的代码即可:

#include <math.h>与#include "math.h"的区别在于,遇到#include <math.h>命令时系统从默认的头文件目录中查找文件math.h文件;而遇到#include "math.h"时系统首先从当前的目录中搜索,如果没有找到再在默认的头文件目录中查找文件math.h文件。因此包含系统提供的库函数使用#include <math.h>方式搜索速度比较快;如果包含用户自定义的.h文件使用#include"math.h"方式,搜索速度比较快。

提示

在使用#include指令的时候,对系统文件,使用#include < >的形式较好;而对用户自定义文件,则使用#include ""的形式速度较快。