条件编译

条件编译就是按条件对C程序的一部分进行编译,其它部分不编译。条件编译的目的是使源代码能更迅速、更容易地进行修改,并使目标代码缩短。这样,当程序在不同系统上编译、在同一系统不同编译器上编译或进行不同目的的编译时,减少对程序语句的修改,而让编译预处理器把该语句留下或忽略。
条件编译有#if语句、#if-elif语句、#ifdef语句、#ifndef语句。

1条件编译语句

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 99\n");
#else
  printf("Compiled for small array\n");
#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,Zhao\n");
#else
printf("Hello,anyone\n");
#endif
#ifndef CHEN
printf("Chen not be defined\n");
#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] != '\0')
{ 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语句进行编译处理,把大写字母变成小写字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值