C++ 如何避免一個頭文件被include多次

同一個文件中只能將一個頭文件include一次。記住這個規則很容易,但是很可能在不知情的情況下將頭文件包含多次,因爲你include的頭文件裏可能還會include其它的頭文件,這樣層層嵌套,很容易出現上面的問題。這時就會帶來編譯的錯誤。

C/C++中有一種標準的技術可以有效避免多次include同一個頭文件,即預編譯指令#ifndef(if not defined)。例如對於我們定義的頭文件<coordin.h>,可以有如下寫法:

#ifndef _COORDIN_H
#define _COORDIN_H
...     // 頭文件的內容
#endif

對於這種寫法有以下幾點說明:

  1. _COORDIN_H可以是任意的名字,這種寫法一是該名稱與該頭文件相關,其次是考慮到該名稱要在其它地方不太可能被定義,所以以下劃線“_”開頭和彼此連接,
  2. 編譯器第一次遇到該文件的時候,"_COORDIN_H"還沒有被define, 因此會執行裏面的內容,首先定義"_COORDIN_H",其次讀取頭文件的核心內容。當以後再include這個頭文件的時候,"_COORDIN_H"已經被定義了,因此頭文件的主體也就不會再被讀取了。
  3. 注意,這種方法並不能防止編譯器將文件include兩次,只是可以讓它忽略第一次include以外的所有內容。大多數的C/C++頭文件都是用這種防護(guarding)方案。
  4. 通常情況下使用#define語句來創造符號常量,如下所示:
#define MAXIMUM 4096

但只要#define用於定義名稱,只使用其本身就足以完成該名稱的定義了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章