【例23.4】将23.2节的源文件c23_3.c改造为使用一个源文件和一个头文件的程序结构。
【解答】这时要为源文件设计自己的头文件,即将其改造为两个文件。将第一部分的3条语句从c23_3.c文件中取出,放到一个名为c23_4.h的头文件中。下面是头文件的内容。
// 头文件c23_4.h #include <stdio.h> //1 包含stdio.h 头文件 const int NUM=100 ; //2 定义常量变量NUM=100 int max (int ,int ); //3 函数max 的原型声明
这里使用const定义常量变量代替原来使用#define语句定义的宏定义,以便演示const语句的使用方法。将剩下的c23_3.c的内容改为c23_4.c。
产生头文件的方法与产生C程序源文件的方法类似,具体方法如下。
(1)假设已经产生如图23-2所示的项目c23_4和源文件c23_4.c。用鼠标选中“Header Files”,然后使用文件菜单的“New”命令,弹出如图23-3所示的“New”对话框。

图23-2 产生的c6.h示意图

图23-3 添加头文件c23_4.h示意图
(2)选择图23-3的Files列表框中的“C/C++Header Files”项,在右边的“File”框中输入c23_4(因为默认为后缀.h文件,所以不必输入c23_4.h)即可。
(3)在右边的编辑框中编辑头文件c23_4.h。编辑结果参见图23-2。
由此可见,头文件中除了用来编写预处理命令和声明函数原型之外,还可以声明或定义全局变量。
这种结构要求在源文件c23_4.c中,使用#include将自己设计的头文件c23_4.h包含进去。一般来讲,这个头文件在项目目录c23_4之下,所以应该使用双引号。即
#include "c23_4.h"
下面是源程序文件c23_4.c的内容。
// 源文件c23_4.c #include "c23_4.h" // 注意使用双引号包含c6.h int main ( ) // 主函数 { int a ,b ,x ; a=2 ; b=3 ; x=NUM*max ( a ,b ); printf ("%d\n" ,x ); return 0 ; } int max (int m1 , int m2 ) { if (m1 > m2 ) return m1+NUM ; else return m2+NUM ; }
头文件是不能编译的,选中源文件c23_4.c,编译并运行程序,输出10300。头文件的关联方式是系统设计好的,只要按照约定,就可以实现程序的功能。
可以用下面的简单构造模型表示它的构成。
(1)头文件:用来编写预处理命令、函数原型声明及全局变量声明或定义。
(2)源文件:包含头文件、编写相应主程序和函数。