頭文件的第一個功能就是 #include 指令,即在預編譯時把它後面所寫的那個文件的內容,完完整整地一字不改地包含到當前的文件中來。
多次包含相同的頭文件,會導致編譯器多次編譯該頭文件,代碼量小還好,代碼量一大會使整個項目的編譯速度變的緩慢,甚至會使程序在編譯鏈接的時候崩潰。
另外,C頭文件也用來對函數原型或變量進行聲明,以及宏定義等。C的頭文件也可以用來進行定義(函數或變量定義)。但C語言語法中要求對於變量和函數是不能重複定義的,重複包含會導致編譯出錯。
如當頭文件a.h中有一個對變量的定義:
int x = 10;
當多次包含該文件時,就變成了:
int x = 10;
int x = 10;
......
int x = 10;
這樣就會出錯。
假如頭文件中有定義 static 變量,就會在每個文件中產生靜態變量,邏輯就更亂了。
為避免上述錯誤,頭文件中建議這樣寫:
#ifndef _XXX_H_ //該文件的標識符
#define _XXX_H_
頭文件內容
#endif
第一次編譯該頭文件時,沒有定義 _XXX_H_,那麼就執行下面的程序,首先定義_XXX_H_,然後繼續執行頭文件的內容。這樣的話第一次包含該頭文件時,該頭文件就被編譯器編譯。
而當該頭文件被第二次包含時,由於 _XXX_H_ 已經被定義,所以後面的的代碼編譯器就不編譯了,直接忽略,這樣就防止了頭文件的重複包含。
閱讀更多 算法集市 的文章