文件包含

来源:互联网 发布:个人网站域名备案 编辑:程序博客网 时间:2024/03/29 17:26
通过本章学习,应理解编译预处理的概念。理解"文件包含"的概念,掌握文件包含命令的使用方法。理解宏定义的概念,掌握不带参数的宏定义命令和带参数的宏定义命令的使用方法。理解条件编译的概念,初步掌握条件编译命令的使用方法。


  在前面章节所编写的程序中,经常会用到#include <iostream.h>、#include <iomanip.h>、#include <math.h>、#define PI 3.14159等命令,这些命令称为"编译预处理命令"。所谓"编译预处理"是指在对源程序进行通常的编译之前,根据编译预处理程序所提供的预处理命令对源程序作相应的处理。C++具有编译预处理功能,C++源程序中可以加入预处理命令,但预处理命令不是C++的语句,也不属于C++的语法范畴。


  C++的预处理功能主要有以下三种:


  (1)文件包含
  (2)宏定义
  (3)条件编译


  它们分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般的C++语句相区别,这些命令以符号"#"开头,并且在其行尾没有分号;一条预处理命令单独占一行;它们一般放在源程序的开头处。

6.1 文件包含处理


  文件包含处理是指一个源程序文件可以将另外一个源程序文件的全部内容包含进来,即将另外的一个文件嵌入到本文件之中。
  C++提供了文件包含命令#include来实现文件包含处理,其一般格式为:
  #include "文件名"
  或
  #include <文件名>
  功能:根据"文件名",把指定文件的全部内容读到当前处理的文件中,作为当前文件的一个组成部分,即把文件的内容替代该#include命令行。
  例如:源程序文件file1.cpp中有文件包含命令:

 

 

 

  #include "file2.h"
  则编译预处理程序将file2.h文件的全部内容复制并插入到file1.cpp文件中的#include "file2.h"命令处,即file2.h被包含到file1.cpp中,并将包含file2.h后的file1.cpp文件作为一个源程序文件来处理。如图6.1所示。
  【例6.1】 输入两个整数a和b,输出其中较大的一个数。
  文件filemax.h的内容为:

 int max(int x,int y)
 { int z;
  if (x>=y)
   z=x;
  else
   z=y;
  return(z);
 }
 文件filemain.cpp的内容为:
 #include <iostream.h> //包含输入/输出头文件iostream.h
 #include "filemax.h" //包含文件filemax.h
 void main(void)
 { int a,b,m;
  cout<<"Input a,b:";
  cin>>a>>b;
  m=max(a,b);
  cout<<"max="<<m<<endl;
 }
  预编译预处理后,文件filemain.cpp变为如下形式:
  #include <iostream.h> //由于iostream.h头文件是由C++系统
  //提供的,所以此处不再将该文件展开。
 int max(int x,int y)
 { int z;
  if (x>=y)
   z=x;
  else
   z=y;
  return(z);
 }
 void main(void)
 { int a,b,m;
  cout<<"Input a,b:";
  cin>>a>>b;
  m=max(a,b);
  cout<<"max="<<c<<endl;
 }

  经过预编译预处理后,文件filemax.h被插入到文件filemain.cpp中的#include "filemax.h"处。常用在文件头部的被包含文件称为"标题文件"或"头文件",常以".h"作为文件的扩展名,当然也可以使用其他的扩展名。
  

  说明:
  (1)#include只能指定一个被包含文件,如果要包含n文件,则要用n个#include命令;
  (2)一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。例如:
  file1.cpp中有命令:#include "file2.h"
  file2.h中有命令:#include "file3.h"
  相当于:file1.cpp中有命令:
  #include "file3.h"
  #include "file2.h"
  (3)在#include命令中,文件名可以用双引号或尖括号括起来。例如:
  file1.cpp中有命令:#include "file2.h"
  也可以写成:#include <file2.h>


  在#include命令中,文件名用双引号或尖括号括起来都是合法的。两者的区别是:用尖括号时,系统直接到存放C++库函数头文件所在的目录(即include目录)中查找要包含的文件,这称为标准方式;用双引号时,系统先在用户当前工作目录中查找要包含的文件,这称为用户方式,若找不到再按标准方式查找(即再按尖括号的方式查找)。所以,一般来说,如果为调用库函数而用#include命令来包含相关的文件,则用尖括号,以节省查找时间;如果要包含的是用户自己编写的文件(这种文件一般都在当前工作目录中),则用双引号。
  

  (4)文件包含命令可出现在程序中的任何位置。通常,将文件包含命令放在源程序文件开始部分。
文件包含主要在两种情况下使用,一是在程序文件要用到C++的库函数时,必须把含有该库函数的头文件包含到本文件中,例如,要实现输入/输出时必须包含头文件"iostream.h",要使用数学函数时必须包含头文件"math.h";二是在设计一个大型程序时,可将程序公用的一些数据结构、输出格式定义成头文件,然后在相应的处理程序中,用文件包含命令将相应的头文件包含进来。

  【例6.2】 求矩形的对角线的长、周长和面积。
 #include <iostream.h> //包含输入/输出头文件iostream.h
 #include <math.h> //包含数学函数头文件math.h
 void main(void)
 { float a,b,p,l,s; //定义变量a、b、p、l、s
  cout<<"输入长方形的边长:";
  cin>>a>>b; //输入长方形边长a、b
  p=sqrt(a*a+b*b); //计算长方形对角线长p
  l=2*(a+b); //计算长方形周长l
  s=a*b; //计算长方形面积s
  cout<<"长方形对角线="<<p<<endl; //输出长方形对角线长p
  cout<<"长方形周长= "<<l<<endl; //输出长方形周长l
  cout<<"长方形面积= "<<s<<endl; //输出长方形面积s
 }
  程序执行后提示:
  输入长方形的边长:3 4
  长方形对角线=5
  长方形周长= 14
  长方形面积= 12