条件编译

一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。

条件编译语句排版时,需考虑以下三种位置:

1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);

2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);

3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。

条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据 表达式的值或者某个特定的宏是否被定义来确定编译条件。

#if、#else、#elif和#endif指令

一般形式有如下几种
(1)
1
2
3
4
5
#if表达式
//语句段1
#else
//语句段2]
#endif
如果 表达式为真,就编译语句段1,否则编译语句段2 [1]  
(2)
1
2
3
4
5
6
7
#if表达式1
//语句段1
#elif表达式2
//语句段2
#else
//语句段3
#endif
如果表达式1真,则编译语句段1,否则判断表达式2;如果表达式2为真,则编译语句段2,否则编译语句段3

#ifdef和#ifndef

(1)#ifdef的一般形式:[1] 
1
2
3
#ifdef宏名
//语句段
#endif
作用:如果在此之前已定义了这样的宏名,则编译语句段。
(2)#ifndef的一般形式:[1] 
1
2
3
#ifndef宏名
//语句段
#endif
作用:如果在此之前没有定义这样的宏名,则编译语句段。
#else可以用于#ifdef和#ifndef中,但#elif不可以。

#error

指令将使 编译器显示一条错误信息,然后停止编译。

#line

指令可以改变 编译器用来指出警告和错误信息的文件号和行号。

#pragma

指令没有正式的定义。 编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
#define LETTER1
int  main( int  argc, char *argv[])
{
char  str[20]= "CLanguage" ,c;
int  i;
i=0;
while ((c=str[i])!= '\0' )
{
i++;
#ifdef LETTER1
if (c>= 'a' &&c<= 'z' )
c=c-32;
#else
if (c>= 'A' &&c<= 'Z' )
c=c+32;
#endif
printf ( "%c" ,c);
}
return0;
}





条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译 。了解: 条件编译 当然也可以用条件语句来实现。 但是用条件语句将会对整个 源程序 进行编译,生成的 目标代码 程序很长,而采用条件编译,则根据条件只编译其中的 程序段 1或程序段2,生成的 目标程序 较短。如果条件选择的程序段很长,采用条件编译的方法是十分必要的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值