C語言頭文件中 #ifndef #define #endif 的作用

頭文件的第一個功能就是 #include 指令,即在預編譯時把它後面所寫的那個文件的內容,完完整整地一字不改地包含到當前的文件中來。

多次包含相同的頭文件,會導致編譯器多次編譯該頭文件,代碼量小還好,代碼量一大會使整個項目的編譯速度變的緩慢,甚至會使程序在編譯鏈接的時候崩潰。

C語言頭文件中 #ifndef #define #endif 的作用

另外,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_ 已經被定義,所以後面的的代碼編譯器就不編譯了,直接忽略,這樣就防止了頭文件的重複包含。


分享到:


相關文章: