條件編譯 ifndef和 endif

2021-08-31 15:52:02 字數 1200 閱讀 9559

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

#ifndef 識別符號

程式段1

#else

程式段2

#endif

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

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

#ifndef

程式段1

#denif

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

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

class aaa

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

#ifndef aaa

#define aaa

class aaa

;#endif

就可以避免這樣的問題。

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

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

#ifndef 標識

#define 標識……

#endif

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

#ifndef stdio_h

#define stdio_h

#endif

(1)#ifdef和#endif必須成對使用。

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

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

在#ifdefine _debug和對應的#endif中有**,則這些**只有在除錯(debug)下才會被編譯。也就是說,如果你在release模式下,這些**根本不會存在於你的最終**裡頭。

編譯器預處理 ifndef 條件編譯

這是 if not defined的簡寫,是巨集定義的一種,它是可以根據是否已經定義了乙個變數來進行分支選擇,一般用於除錯等等。實際上確切的說這應該是預處理功能中三種 巨集定義,檔案包含和條件編譯 中的一種 條件編譯。define x 定義乙個巨集 endif c語言在對程式進行編譯時,會先根據預處...

C C 預編譯指令和條件編譯

1.常見的預編譯指令和條件編譯項有如下這些 define undef ifdef ifndef if elif else endif 1 define 定義乙個預處理巨集 2 undef 取消巨集的定義 3 if 編譯預處理中的條件命令,相當於c語法中的if語句 4 ifdef 判斷某個巨集是否被定...

條件編譯 if

1 為什麼需要條件編譯 客戶的需求在不停地發生變化,一會兒需要這個功能,一會兒不需要這個功能。我們可以使用條件編譯來方便地裁剪功能。2 條件編譯語句 if 條件編譯語句 if的形式是 1 if expression 2.3 elif expression 4.5 elif expression 6....