#ifdef與#endif的作用及用法 - andylanzhiyong的部落格 - csdn部落格
一般情況下,源程式所有的行都參與編譯。但是有時希望對其中一部分內容只有滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是「條件編譯」。有時 ,希望當滿足條件時對一組語句進行編譯,當條件不滿足時則編譯另一條語句。
條件編譯命令最常見的形式為:
#ifdef 識別符號 程式段1它的作用是:當識別符號已經被定義過(一般用#define命令定義),則對程式段1進行編譯,否則編譯程式段2#else 程式段2
#endif
其中#else部分也可以沒有,即:
ifdef 程式段1在標頭檔案中使用#ifdef和#ifndef是非常重要的,可以防止雙重定義錯誤。如你在標頭檔案aaa.h中定義乙個類aaa如下:endif
class
aaa;
如果兩次#include "aaa.h"就會出錯,因為相同的類不能定義兩次。把aaa.h稍作修改:
#ifndef _aaa_
#define _aaa_
class
aaa;
#endif
就可以避免這樣的問題。因為當你已經包含過這個檔案,_aaa_就會有定義,那麼#ifndef的條件為假,就不會再執行後面的類定義了。
#ifdef和#endif必須成對使用,理論上來說可以應用於任何位置(標頭檔案和現實檔案中)
通常為了防止標頭檔案被多次包含,在標頭檔案中使用是必須的:
如:#ifdef 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 識別符號 程式段1 else ...
條件 ifdefine與 endif的作用
好久沒寫 基本的東西都忘了。今天工作中犯了這個小錯誤,記下來,順便溫習一下。條件編譯中最常見的一種就是如下這種情況 ifdef 識別符號 程式段1 else 程式段2 endif 意思是,如果定義了識別符號就執行程式段1,否則就執行程式段2。其中的else可有可無,看自己 邏輯情況而定。稍微再引申一...