在一般情況下,源程式的所有程式行都會參加編譯,以生成目標**。但在某些特殊情況下,也許只希望對部分滿足條件的程式行進行編譯,這就是條件編譯。
程式設計師可在除錯程式中增加一些除錯語句,以達到跟蹤的目的。當程式除錯好後,再利用條件編譯重新編譯,使除錯語句不參與編譯,以生成高效的**。
常用的條件編譯命令有如下三種格式:
1.格式一
#ifdef 《識別符號》
程式段1
#else
程式段2
#endif
其中,ifdef、else和endif都是關鍵字。《程式段1>和《程式段2>由若干條預處理命令或c++語句組成。該條件編譯命令的功能是:如果在程式中定義了指定的《識別符號》時,就用《程式段1>參與編譯;否則,用《程式段2>參與編譯。
如果在該格式中省略else分支,也可直接寫為如下形式:
#ifdef 《識別符號》
程式段#endif
2.格式二
#ifndef 《識別符號》
程式段1
#else
程式段2
#endif
或者#ifndef 《識別符號》
程式段#endif
其中,ifndef、else和endif都是關鍵字。該條件編譯命令的功能是:如果在程式中末定義《識別符號》時,就用《程式段1>參與編譯;否則,用《程式段2>參與編譯。
3.格式三
#if 《常量表示式1>
程式段1
#elif 《常量表示式2>
程式段2
…………
#elif 《常量表示式n>
程式段n
#else
程式段n+1
#endif
其中,if、elif、else和endif都是關鍵字。該條件編譯命令的功能是:依次計算常量表示式的值,當為邏輯真時,則用相應的程式段參與編譯;如果全部常量表示式的值都為邏輯假,則用else後的程式段參與編譯。
visual c++還提供一種類似於函式的運算子defined(),它的格式如下:
defined( 《識別符號》 )
其功能是:當《識別符號》已被定義且沒有被取消時,其表示式的值為非0;當《識別符號》末定義或已被取消時,其表示式的值為0。它經常被用來判斷某個識別符號是否已巨集定義。
條件編譯在程式設計中具有十分廣泛的應用。例如,在程式除錯時,經常需要在源程式中插入一些程式除錯語句(主要是一些條件判斷語句和輸出語句)。這些語句是為了幫助程式除錯而插入的,在除錯完成後還需要逐一刪除。如果用手工刪除就顯得比較麻煩,而且容易出錯。這時,可以用條件編譯命令來實現自動處理,其**如下:
#define debug 1
…………
#if debug
cout << "ok!"<【出處】
C 條件編譯
條件編譯 按照不同的編譯條件去編譯不同的程式 從而使乙個源程式在不同的編譯條件下生成不同的目標程式。c 提供幾種條件編譯指令,以乙個表示式或者某個巨集是否被定義的條件作為編譯條件。指令 用途 空指令,無任何效果 include 包含乙個源 檔案 define 定義巨集 undef 取消已定義的巨集 ...
C 條件編譯
一 條件編譯方法 1 if,elif,else,endif 使用條件編譯指令,如果滿足 if後面的條件,就編譯 if和 endif之間的程式段,否則不編譯。二 編譯此段 時是否有某個巨集通過 ifdef,else,endif或 ifndef,else,endif 如果乙個c源程式在不同計算機系統上執...
C條件編譯
在 c 語言中,條件編譯指令可以實現源 的部分編譯功能,可以根據表示式的值或者某個特定的巨集來確定編譯條件,以決定編譯哪些 不編譯哪些。在 c 語言中,乙個檔案中可以包含多個標頭檔案,而標頭檔案之間又是可以相互引用的,這將引起乙個檔案中可能間接多次包含某個標頭檔案,從而導致了某些標頭檔案被重複引用多...