C語言標頭檔案編寫的幾個基本規則

2021-06-20 16:19:38 字數 1601 閱讀 4523

1.       注釋,版權,作者,重大修訂記錄等資訊

2.       防重入開關,也就是常見的 #ifndef… #define… #endif

3.       c++ 編譯器自適應開關,也就是常見的 #ifdef __cplusplus… extern 「c」 #endif

4.       #include ,標頭檔案裡應該 include 所有該檔案中所使用的其它介面標頭檔案。這裡有也有兩層含義,一是說標頭檔案應做到自包含,即使用標頭檔案的使用者不需要再為該標頭檔案 include 其它標頭檔案;二是從模組耦合內聚角度來說,標頭檔案中本身不應該 include 太多其它標頭檔案,一般就是通用資料型別定義, include 其它標頭檔案意味著強耦合——引用了其它標頭檔案中的型別定義,巨集或是函式。

5.       介面宣告及注釋,包括函式,結構體等,但不應該出現全域性變數,和 static 型別的介面,這些都應該是放置在 c 檔案中。函式的注釋中應該包括功能說明,引數使用方法,可能的返回值,及其它注意事項。結構體的注釋中應該包括每個成員變數所表示的含義。我們也提倡自注釋,即通過合理的命名達到見名知意的效果。

一些初學c語言的人,不知道標頭檔案(*.h檔案)原來還可以自己寫的。只知道呼叫系統庫 函式時,要使用#include語句將某些標頭檔案包含進去。其實,標頭檔案跟.c檔案一樣,是可以自己寫的。標頭檔案是一種文字檔案,使用文字編輯器將**編寫好之後,以副檔名.h儲存就行了。標頭檔案中一般放一些重複使用的**,例如函式宣告,變數宣告,常數定義,巨集的定義等等。當使用#include語句將標頭檔案引用時,相當於將標頭檔案中所有內容,複製到#include處。為了避免因為重複引用而導致的編譯錯誤,標頭檔案常具有 

#ifndef 

label

#define 

label

//**部分

#endif

的格式。其中,label為乙個唯一的標號,命名規則跟變數的命名規則一樣。常根據它所在的頭檔名來命名,例如,如果標頭檔案的檔名叫做hardware.h,

那麼可以這樣使用:

#ifndef 

__hardware_h__

#define 

__hardware_h__

//**部分

#endif

這樣寫的意思就是,如果沒有定義__hardware_h__,則定義__hardware_h__,並編譯下面的**部分,直到遇到#endif。這樣,當重複引用時,由於__hardware_h__已經被定義,則下面的**部分就不會被編譯了,這樣就避免了重複定義。

另外乙個地方就是使用include時,使用引號與尖括號的意思是不一樣的。使用引號(「」)時,首先搜尋工程檔案所在目錄,然後再搜尋編譯器標頭檔案所在目錄。而使用尖括號(<>)時,剛好是相反的搜尋順序。假設我們有兩個檔名一樣的標頭檔案hardware.h,但內容卻是不一樣的。乙個儲存在編譯器指定的頭檔案目錄下,我們把它叫做檔案i;另乙個則儲存在當前工程的目錄下,我們把它叫做檔案ii。如果我們使用的是#include ,則我們引用到的是檔案i。如果我們使用的是#include 「hardware.h」,則我們引用的將是檔案ii。筆者以前就遇到過乙個同事問,為什麼他修改了那個標頭檔案裡面的內容,好象跟沒有修改一樣?就是因為他有兩個一樣的標頭檔案(就像我們剛描述的那樣),他是使用#include引用的,而他修改時,卻是當前工程所在的目錄下的那個檔案。

C標頭檔案編寫基本規則

1.注釋,版權,作者,重大修訂記錄等資訊 2.防重入開關,也就是常見的 ifndef h 必須確保header guard巨集名永不重名 define h 標頭檔案內容 endif 3.c 編譯器自適應開關,也就是常見的 h檔案頭部 ifdef cplusplus extern c endif 4....

C語言標頭檔案的編寫

標頭檔案是一種文字檔案,使用文字編輯器將 編寫好之後,以副檔名 h儲存就行了。標頭檔案中一般放一些重複使用的 例如函式宣告,變數宣告,常數定義,巨集的定義等等。當使用 i nclude 語句將標頭檔案引用時,相當於將標頭檔案中所有內容,複製到 i nclude處。為了避免因為重複引用而導致的編譯錯誤...

編寫自己的C語言標頭檔案

一些初學c語言的人,不知道標頭檔案 h檔案 原來還可以自己寫的。只知道呼叫系統庫 函式時,要使用 include語句將某些標頭檔案包含進去。其實,標頭檔案跟.c檔案一樣,是可以自己寫的。標頭檔案是一種文字檔案,使用文字編輯器將 編寫好之後,以副檔名.h儲存就行了。標頭檔案中一般放一些重複使用的 例如...