C 條件編譯

2021-07-23 08:42:43 字數 1640 閱讀 9163

條件編譯:按照不同的編譯條件去編譯不同的程式**,從而使乙個源程式在不同的編譯條件下生成不同的目標程式。

c++提供幾種條件編譯指令,以乙個表示式或者某個巨集是否被定義的條件作為編譯條件。

指令             用途

# 空指令,無任何效果

#include 包含乙個源**檔案

#define 定義巨集

#undef 取消已定義的巨集

#if 如果給定條件為真,則編譯下面**

#ifdef 如果巨集已經定義,則編譯下面**

#ifndef 如果巨集沒有定義,則編譯下面**

#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面**,其實就是else if的簡寫

#endif 結束乙個#if……#else條件編譯塊

#error 停止編譯並顯示錯誤資訊

條件編譯命令形式:

1) #ifdef 識別符號

程式段1

#else

程式段2

#endif

它的作用是當所指定的識別符號已經被#define命令定義過,則在程式編譯階段只編譯程式段1,否則編譯程式段2。#endif用來限定#ifdef命令的範圍。其中#else部分也可以沒有。

2) #if 表示式

程式段1

#else

程式段2

#endif

它的作用是當指定的表示式值為真(非零)時就編譯程式段1,否則編譯程式段2。可以事先給定一定條件,使程式在不同的條件下執行不同的功能。

3) #ifndef 識別符號

程式段1

#else

程式段2

#endif

它的作用是當所指定的識別符號沒有被#define命令定義過,則在程式編譯階段只編譯程式段1,否則編譯程式段2。#endif用來限定#ifdef命令的範圍。其中#else部分也可以沒有。

示例1

#include #define letter 1

int main()

}

由於letter為真,對第乙個if語句進行編譯,將小寫字母轉換成大寫字母,輸出'language';若letter為假,編譯第二個語句塊,輸出為小寫;

示例2

#include using namespace std;

#define debug

int main( )

第3行用#define命令的目的不在於用debug代表乙個字串,而只是表示已定義過debug,因此debug後面寫什麼字串都無所謂,甚至可以不寫字串。在除錯程式時去掉第3行(或在行首加//,使之成為注釋行),由於無此行,故未對debug定義,第6行據此決定編譯第7行,執行時輸出

relese : value of version: 60

end在除錯完成後,在執行之前,加上第3行,重新編譯,由於此時debug已被定義過,運**況為:

debug: value of version: 50

end好處:減少被編譯的語句,從而減少目標程式的長度,並且提高了程式的可移植性(比如條件是不同平台或者語言之類的),增加了程式設計的靈活性。

C 條件編譯

一 條件編譯方法 1 if,elif,else,endif 使用條件編譯指令,如果滿足 if後面的條件,就編譯 if和 endif之間的程式段,否則不編譯。二 編譯此段 時是否有某個巨集通過 ifdef,else,endif或 ifndef,else,endif 如果乙個c源程式在不同計算機系統上執...

C條件編譯

在 c 語言中,條件編譯指令可以實現源 的部分編譯功能,可以根據表示式的值或者某個特定的巨集來確定編譯條件,以決定編譯哪些 不編譯哪些。在 c 語言中,乙個檔案中可以包含多個標頭檔案,而標頭檔案之間又是可以相互引用的,這將引起乙個檔案中可能間接多次包含某個標頭檔案,從而導致了某些標頭檔案被重複引用多...

C 條件編譯

c 的預處理器指令從來不會轉化為可執行 的命令,但是會影響編譯過程的各個方面,常用的預處理器指令有 define undef if,elif,else和 endif等等,下面介紹c 中使用 define進行條件編譯的例項。c 中條件編譯指令用於按條件包含或排除原始檔中的某些部分。在visual st...