【例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)源文件:包含頭文件、編寫相應主程序和函數。