條件編譯屬於三種宏定義中的一種,條件指示符的最主要目的是防止標頭檔案的重複包含和編譯,例如:一個c檔案包含同一個h檔案多次,如果不加#ifndef宏定義,會出現變數重複定義的錯誤條件編譯常用的有四個預處理命令:#if、#else、#elif、#endif。#if指令的形式為:#if 常量表達式程式碼塊#endif#if後面的常量表達式為值,則編譯它與#endif之間的程式碼,否則跳過這些程式碼。指令#endif標識一個#if塊的結束。#else被使用來標誌#if的末尾和#else塊的開始。這是必須的,因為任何#if僅有一個#endif與之關聯。#elif意指"else if",它形成一個if else if巢狀語句用於多種編譯選擇。#elif後面跟一個常量表達式,如果表示式是真,則編譯其後的程式碼塊,不對其他#elif表示式進行檢測,否則順序測試下一塊。常見的形式如下:形式1: #ifdef 識別符號 /*程式段 1*/ #else /*程式段 2*/ #endif它的作用是當識別符號已經由#define定義過了,則編譯程式段1,否則編譯程式段2,也可以使用簡單形式 #ifdef 識別符號 /*程式段1*/ #endif 形式2: #ifndef 識別符號 #define 識別符號 /*程式段 1*/ #else /*程式段 2*/ #endif 它的作用是當識別符號沒有由#define定義過,則編譯程式段1,否則編譯程式段2 ,也可以使用簡單形式 #ifndef 識別符號 #define 識別符號 /*程式段 1*/ # endif形式3: #if 表示式 /*程式段 1*/ #else *程式段 2*/ # endif 它的作用是 當“表示式”值為真時編譯程式段1。否則則編譯程式段2,也可以使用簡單形式 # if 表示式 /*程式段 1*/ # endif形式4: #if 表示式1 /*程式段 1*/ #elif 表示式2 /*程式段 2*/ ............ #elif 表示式n /*程式段n */ #endif 它的作用是當“表示式1”值為1時編譯程式段1,表示式2的值為真是編譯程式段2,否則依次順序判斷到表示式n。最後,條件編譯的條件是一個常量表達式,支援邏輯與&&和或||運算。以上四種形式的條件編譯預處理結構都可以巢狀使用,識別符號: 在理論上來說可以是自由命名的,但每個標頭檔案的這個識別符號都應該是唯一的。標識的命名規則一般是標頭檔案名全大寫,前後加下劃線,並把檔名中的“.”也變成下劃線,如:stdio.h。#ifndef _STDIO_H_#define _STDIO_H_/*程式段 */#endif
條件編譯屬於三種宏定義中的一種,條件指示符的最主要目的是防止標頭檔案的重複包含和編譯,例如:一個c檔案包含同一個h檔案多次,如果不加#ifndef宏定義,會出現變數重複定義的錯誤條件編譯常用的有四個預處理命令:#if、#else、#elif、#endif。#if指令的形式為:#if 常量表達式程式碼塊#endif#if後面的常量表達式為值,則編譯它與#endif之間的程式碼,否則跳過這些程式碼。指令#endif標識一個#if塊的結束。#else被使用來標誌#if的末尾和#else塊的開始。這是必須的,因為任何#if僅有一個#endif與之關聯。#elif意指"else if",它形成一個if else if巢狀語句用於多種編譯選擇。#elif後面跟一個常量表達式,如果表示式是真,則編譯其後的程式碼塊,不對其他#elif表示式進行檢測,否則順序測試下一塊。常見的形式如下:形式1: #ifdef 識別符號 /*程式段 1*/ #else /*程式段 2*/ #endif它的作用是當識別符號已經由#define定義過了,則編譯程式段1,否則編譯程式段2,也可以使用簡單形式 #ifdef 識別符號 /*程式段1*/ #endif 形式2: #ifndef 識別符號 #define 識別符號 /*程式段 1*/ #else /*程式段 2*/ #endif 它的作用是當識別符號沒有由#define定義過,則編譯程式段1,否則編譯程式段2 ,也可以使用簡單形式 #ifndef 識別符號 #define 識別符號 /*程式段 1*/ # endif形式3: #if 表示式 /*程式段 1*/ #else *程式段 2*/ # endif 它的作用是 當“表示式”值為真時編譯程式段1。否則則編譯程式段2,也可以使用簡單形式 # if 表示式 /*程式段 1*/ # endif形式4: #if 表示式1 /*程式段 1*/ #elif 表示式2 /*程式段 2*/ ............ #elif 表示式n /*程式段n */ #endif 它的作用是當“表示式1”值為1時編譯程式段1,表示式2的值為真是編譯程式段2,否則依次順序判斷到表示式n。最後,條件編譯的條件是一個常量表達式,支援邏輯與&&和或||運算。以上四種形式的條件編譯預處理結構都可以巢狀使用,識別符號: 在理論上來說可以是自由命名的,但每個標頭檔案的這個識別符號都應該是唯一的。標識的命名規則一般是標頭檔案名全大寫,前後加下劃線,並把檔名中的“.”也變成下劃線,如:stdio.h。#ifndef _STDIO_H_#define _STDIO_H_/*程式段 */#endif