条件编译
来源:互联网 发布:文艺气息的网名知乎 编辑:程序博客网 时间:2024/05/16 05:56
一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(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 0
- 条件编译&条件属性
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- 条件编译
- hello-world
- iOS开发之自定义view—Quartz2D
- 【数据传输 1】服务器—>客户端之间的数据类型转换
- 【Android Studio】制作启动画面Splash Screen
- 我们如何使用Hibernate的锁(悲观锁)
- 条件编译
- POJ-1276-Cash Machine-多重背包
- object-c之UITableView数据的编辑
- 410c与MS10物联网系统的点灯代码分析
- android---Scroll实现滑动效果
- C语言 数组与字符串
- 抽象类第一课(的注释)
- 单例模式,你知道的和你所不一定知道的一切
- NSUserDefaults的最佳使用方法