條件編譯
件編譯命令可以使得編譯器按不同的條件去編譯程式不同的部分,產生不同的目標**檔案。也就是說,通過條件編譯命令,某些程式**要在滿足一定條件下才被編譯,否則將不被編譯。
常用的條件編譯命令有如下三種格式:
9.3.1 格式一
#ifdef 識別符號
程式段1
#else
程式段2
#endif
其中,ifdef、else和endif都是關鍵字。程式段1和 程式段2是由若干預處理命令和語句組成的。它的功能是,如果識別符號已被 #define命令定義過,則對程式段1進行編譯;否則對程式段2進行編譯。本格式中的#else也可以沒有:
#ifdef 識別符號
程式段
#endif
面是使用這種條件編譯命令的乙個例子:
例9-8
#include
#define time
void main()
{#ifdef time
cout<
在此程式中因為加入了條件編譯預處理命令,因此要根據time是否被#define語句定義過,來決定編譯哪乙個cout語句。如果定義過,則編譯"cout<
圖9-5
本格式中的#else也可以沒有:如果沒有"#else",則流程圖如下:
圖9-6
9.3.2 格式二
#ifndef 識別符號
程式段1
#else
程式段2
#endif
格式二和格式一形式上的的區別在於ifdef關鍵字換成了ifndef關鍵字,其功能是:如果識別符號未被#define命令定義過,則對程式段1進行編譯, 否則對程式段2進行編譯,這與格式一的功能正好相反。例如:
#ifndef null
#define null ((void *)0)
#endif
本段**能夠保證符號null只有一次定義為((void *)0)。
格式二的流程圖表示如下:
圖9-7
9.3.3 格式三
#if 常量表示式
程式段1
#else
程式段2
#endif
if、else和endif是關鍵字。程式段1、程式段2都是由若干條預處理命令和語句組成。它的功能是:如常量表示式的值為真(true),則對程式段1 進行編譯,否則對程式段2進行編譯。因此可以使程式在不同條件下,完成不同的功能。
舉例如下:
例9-10
#include >c;
#if r
r=3.14159*c*c;
cout<
在這個例子中,如果常量表示式r為真,則編譯語句:
r=3.14159*c*c;
cout<
例9-11
#include
#define a -10
void main( )
{#if a>0
cout<< "a>0"<
圖9-8
C語言基礎 條件編譯
指令 用途 空指令,無任何效果 include 包含乙個源 檔案 define 定義巨集 undef 取消已定義的巨集 if 如果給定條件為真,則編譯下面 ifdef 如果巨集已經定義,則編譯下面 ifndef 如果巨集沒有定義,則編譯下面 elif 如果前面的 if給定條件不為真,當前條件為真,則...
C 條件編譯
條件編譯 按照不同的編譯條件去編譯不同的程式 從而使乙個源程式在不同的編譯條件下生成不同的目標程式。c 提供幾種條件編譯指令,以乙個表示式或者某個巨集是否被定義的條件作為編譯條件。指令 用途 空指令,無任何效果 include 包含乙個源 檔案 define 定義巨集 undef 取消已定義的巨集 ...
C 條件編譯
一 條件編譯方法 1 if,elif,else,endif 使用條件編譯指令,如果滿足 if後面的條件,就編譯 if和 endif之間的程式段,否則不編譯。二 編譯此段 時是否有某個巨集通過 ifdef,else,endif或 ifndef,else,endif 如果乙個c源程式在不同計算機系統上執...