ifdef與 endif的作用及用法

2021-08-11 00:12:16 字數 1366 閱讀 3906

一般情況下,源程式中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是「條件

編譯」。有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。

條件編譯

命令最常見的形式為:

#ifdef 識別符號

程式段1

#else

程式段2

#endif

它的作用是:當識別符號已經被定義過(一般是用#define命令定義),則對程式段1進行編譯,否則編譯程式段2。

其中#else部分也可以沒有,即:

#ifdef

程式段1

#denif

在標頭檔案中使用#ifdef和#ifndef是非常重要的,可以防止雙重定義的錯誤。

如你在標頭檔案aaa.h中定義了乙個類aaa如下:  

class   aaa  

;  如果兩次#include   "aaa.h"(不見得是直接,也有可能兩個不同的標頭檔案中都包含了這個標頭檔案)就會出錯,因為相同的類不能定義兩次。把aaa.h稍做修改:  

#ifndef   _aaa_  

#define   _aaa_  

class   aaa  

;  #endif  

就可以避免這樣的問題。因為當你已經包含過這個檔案,_aaa_就會有了定義,那麼#ifndef的條件為假,就不會再執行後面的類定義了。 

#ifdef和#endif必須成對使用。  

從理論上講可以出現在任何地方(標頭檔案和實現檔案中)  

通常為了防止標頭檔案被多次包含,在標頭檔案中使用是必須的:  

如:#ifndef   my_head_h   //標頭檔案開頭,名字是任意的,注意不要和其它標頭檔案衝突  

標頭檔案宣告  

#endif     //標頭檔案結尾

有時候,在b.h中會include   "a.h"  ,在"c.h"中會include   "b.h"及include"a.h", 這時,如果不用ifndef/endif,就會包含兩次a.h,產生錯誤。 

還是把頭檔案的內容都放在#ifndef和#endif中吧。不管你的標頭檔案會不會被多個檔案引用,你都要加上這個。一般格式是這樣的:

#ifndef 《標識》

#define 《標識》

......

...... 

#endif

《標識》在理論上來說可以是自由命名的,但每個標頭檔案的這個「標識」都應該是唯一的。標識的命名規則一般是頭檔名全大寫,前後加下劃線,並把檔名中的「.」也變成下劃線,如:stdio.h 

#ifndef _stdio_h_

#define _stdio_h_

......

#endif 

ifdef與 endif的作用

ifndef list h define list h class list else endif 常用於標頭檔案中,防止.件中類被重複定義,因為在乙個標頭檔案a中常常引用另乙個標頭檔案b,在主程式中如果引用a.h,b.h,那麼b中的類會出現重複定義的情況,則會報錯。很多時候我們並不清楚標頭檔案之間...

ifdef與 endif的作用及用法

ifdef與 endif的作用及用法 andylanzhiyong的部落格 csdn部落格 一般情況下,源程式所有的行都參與編譯。但是有時希望對其中一部分內容只有滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是 條件編譯 有時 希望當滿足條件時對一組語句進行編譯,當條件不滿足時則編譯...

條件 ifdefine與 endif的作用

好久沒寫 基本的東西都忘了。今天工作中犯了這個小錯誤,記下來,順便溫習一下。條件編譯中最常見的一種就是如下這種情況 ifdef 識別符號 程式段1 else 程式段2 endif 意思是,如果定義了識別符號就執行程式段1,否則就執行程式段2。其中的else可有可無,看自己 邏輯情況而定。稍微再引申一...