#ifndef HeaderName_h #define HeaderName_h #endif 使用詳解

想必不少人都看到過頭文件中寫有:#ifndef HeaderName_h編程

                                               #define HeaderName_h函數

                                                  // 這裏面一般寫各類宏定義、其餘頭文件的包含學習

 

                                               #endif spa

這樣作的目的:防止該頭文件被重複引用io

 

「頭文件被重複引用」是什麼意思?編譯

答:其實「被重複引用」是指一個頭文件在同一個cpp文件中被include了屢次,這種錯誤經常是因爲include嵌套形成的。class

好比:存在a.h文件#include "c.h",而b.cpp文件同時#include "a.h" 和#include "c.h",此時就會形成c.h被b.cpp重複引用。效率

 

頭文件被重複引用引發的後果:變量

有些頭文件重複引用只是增長了編譯工做的工做量,不會引發太大的問題,僅僅是編譯效率低一些。可是對於大工程而言,編譯效率低下那將是一件多麼痛苦的事情。引用

而有些頭文件重複包含,則會引發錯誤,好比:在頭文件中定義了全局變量(雖然這種方式不被推薦,但確實是C規範容許的),這種頭文件重複包含會引發全局變量的重複定義。

 

是否是全部的頭文件中都要加入#ifndef/#define/#endif 這些代碼?

答案:不是必定要加,但最好加上!這是由於:無論怎樣,用ifnde xxx  #define xxx  #endif,只有好處,沒有壞處。

         而且,我的以爲培養一個好的編程習慣是學習編程的一個重要方面。

 

下面給一個#ifndef/#define/#endif的格式:

首先寫:#ifndef A_H   (意思是:"if not define a.h",即若是不存在a.h)

接着寫:#define A_H  (那就引入a.h)

最後寫:#endif   (不然不須要引入a.h,即已存在a.h,無需再次引入)

 

例:
#ifndef GRAPHICS_H // 防止graphics.h被重複引用 
#define GRAPHICS_H 


#include <math.h> // 引用標準庫的頭文件 
… 
#include 「header.h」 // 引用非標準庫的頭文件 
… 
void Function1(…); // 全局函數聲明 
… 
class Box // 類結構聲明 

… 
}; 

 

#endif

相關文章
相關標籤/搜索