- 註冊時間
- 2006-10-8
- 最後登錄
- 2019-6-20
- 主題
- 查看
- 積分
- 1306
- 閱讀權限
- 110
- 文章
- 1392
- 相冊
- 0
- 日誌
- 1
   
狀態︰
離線
|
C 程式的設計,不僅可以用模組化的方式,以函數來表現,亦可將程式碼依其不同的目的與功能,呈現在不同的檔案中。為了程式碼的一致性,如常數,巨集指令,全域(global)變數的宣告(含 extern,將於第九章說明)一些函數的宣告(僅列出函數的標題 heading)等,都放在一檔頭檔 .h,當然不見的是要以 .h 當作副檔名,不過,一般都是以 .h 來當作 include 檔的副檔名,再以指令 #include 方式將該檔 加入即可。指令 #include 的宣告方式如下
#include <filename>
或
#include "filename"
經過編譯器前置處理後,含指令 #include 這行則由該檔 filename 來代替,如果 filename 是由 <,> 所含,則編譯器會到 include 目錄下去找該檔或至預先所定的目錄去找。
例 6: 假設檔案 file1.h 的內容如下:
#define MAXSIZE 100
extern int size;
int f(int x);
假設檔案 file2.c 的內容如下:
#include "file1.h"
main()
{ int A[MAXSIZE],i,sum;
for(i=0;i < size;i++)
sum=sum+f(i);
}
又假設 file1.h 與 file2.c 都在同一目錄下 則經過前置處理, file2.c 就先變成
#define MAXSIZE 100
extern int size;
int f(int x);
main()
{ int A[MAXSIZE],i,sum;
for(i=0;i < size;i++)
sum=sum+f(i);
}
經過前置處理完成後,file2.c 就變成
extern int size;
int f(int x);
main()
{ int A[100],i,sum;
for(i=0;i < size;i++)
sum=sum+f(x);
}
註:
檔頭檔(.h 檔)亦可含 #include 指令而形成階層式的架構。
一個檔案可能會含有相當多 #include 的指令,有時會有重複重宣告情形而產 生錯誤。該現象可以參考 8.3 節的方式來避免。
回本章主目錄
--------------------------------------------------------------------------------
第 8.3 節 #if、#ifdef 等的使用
如果我們在一檔案欲 include 一檔頭檔 file1.h ,又想避免在同一檔案宣告兩次相同的東西,例如:
檔案 file1.h 含 extern int size
檔案 file2.h 含 #include "file1.h"
檔案 file3.h 含 #include "file1.h"
又
檔案 file.c 含 #include "file2.h" 及 #include "file3.h"
則在檔案 file.c 內,變數 size 重複宣告了兩次而產生錯誤。
欲避免這種情況發生,每個 #include "file1.h" 指令, 我們可以改變為如下指令:
#if !define(FILE1)
#define FILE1 "file1.h"
#include FILE1
#endif
或是
#ifndef FILE1
#define FILE1 "file1.h"
#include FILE1
#endif
註:
如果一個辨識名稱 X 沒有被 define 過, 則 define(X) 之值為 0, 或者 ifndef X 為真值。
當 file2.h 與 file3.h 都含上述指令, 如此一來 file1.h 僅能一次被加入 file.c 而不致於產生衝突。 |
|