C 基礎 條件編譯

2021-04-19 23:56:20 字數 2631 閱讀 1399

條件編譯

件編譯命令可以使得編譯器按不同的條件去編譯程式不同的部分,產生不同的目標**檔案。也就是說,通過條件編譯命令,某些程式**要在滿足一定條件下才被編譯,否則將不被編譯。

常用的條件編譯命令有如下三種格式:

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源程式在不同計算機系統上執...