条件编译有#if语句、#i f-elif语句、#ifdef语句、#ifndef语句。
条件编译语句
1.#if
#if的一般形式是:
#if 表达式
程序段1
#else
程序段2
# endif
#if的执行过程是:如果表达式为真,编译程序段1,否则编译程序段2。作为一种特例,当条件为假不执行任何操作时,可以省略#else。
2.#if-#elif-#else-#endif
#if-#elif的形式与if-else if语句形式基本相同,格式为:
#if 表达式1
程序段1
# elif 表达式m
程序段m
# else
程序段n
# endif
如果表达式1的值为真,编译程序段1,否则如果表达式2为真,编译程序段2,依此类推,若表达式m为真,编译程序段m,否则编译程序段n。
3.#ifdef
#ifdef的一般形式是:
#ifdef 标识符
程序段1
# else
程序段2
# endif
如果标识符在此之前已经由#define给出了定义,就编译程序段1,如果这部分内容没有可以空着。否则编译程序段2,如果没有程序段2,#else也可省略。
4.#ifndef
#ifndef的一般形式是:
#ifndef 标识符
程序段1
#else
程序段2
# endif
如果标识符在此之前未经定义,就编译程序段1,如果这部分内容没有可以空着。否则编译程序段2,如果没有程序段2,#else也可省略。。
条件编译例题
例1
#define MAX 10
main( )
{
//#if MAX==99 note notMAX=99
#if MAX>99
printf("Compiled for array greater than 99n");
#else
printf("Compiled for small arrayn");
#endif
}
这里MAX=10,表达式MAX>99为假,因此不编译#if之后的程序段,而编译#else后的程序段,结果显示Compiled for small array。
例2 用ACTIVE_COUNTRY的值来决定货币符号:
#define US 0
#define ENGLAND 1
#define FRANCE 2
#define ACTIVE_COUNTRY US
#if ACTIVE_COUNTRY==US
char currency[ ]= "dollar";
#elif ACTIVE_COUNTRY==ENGLAND
char currency[ ]= "pound";
#elif ACTIVE_COUNTRY==FRANCE
char currency[ ]= "franc";
# endif
例3
#define ZHAO 10
main( )
{
#ifdef ZHAO
printf("Hello,Zhaon");
#else
printf("Hello,anyonen");
#endif
#ifndef CHEN
printf("Chen not be definedn");
#endif
}
程序运行结果: Hello,Zhao
Chen not be defined
如果把本定义中的宏定义去掉,则显示Hello, anyone和Chen not be defined。
例4 采用条件编译,使给定的字符串按小写字母或大写字母输出。
#include "stdio"
#define LETTER 1
main( )
{ int i=0;
static char str[ ]={ "Turbo CProgram"};
char c;
while ((c=str[i] != ' ')
{ i++;
# if LETTER
if (c>='a' &&c<='z') c=c-32;
# else if (c>='A' &&c<='Z') c=c+32;
# endif
printf("%c",c);
}
}
因为LETTER定义为1,即条件表达式的值为真,则在预处理时,对第一个if语句进行编译处理,故此程序可以把小写字母变成大写字母。
程序运行结果为: TURBO C PROGRAM
如果将程序第二行改为:#define LETTER0则在预处理时,对第二个if语句进行编译处理,把大写字母变成小写字母