热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>C++>

C语言-预处理程序

来源: 作者: 时间:2007-12-03 Tag: 点击:
5.      条件编译指令
若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。
5.1#if#else#elif #endif
条件编译指令中最常用的或许是#if,#else,#elif#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。
#if的一般形式是:
#if constant-expression
 Statement sequence
#endif
#if后的常数表达式为真,则#if#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。
 
#else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如:
#include <stdio.h>
#define MAX 100
 
Int main(void)
{
 #if MAX>99
 printf(“Compiled for array greater than 99.\n”);
 #else
 printf(“Complied for small array.\n”);
 #endif
 return 0;
}
注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。
 
#elif指令的意思是“否则,如果”,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果成功则编译之。一般形式如下:
#if expression
 Statement sequence
#elif expression1
 Statement sequence
#elif expression2
 Statement sequence
.
.
.
#elif expression
 Statement sequence
#endif
5.2#ifdef#ifndef
条件编译的另一个方法是使用编译指令#ifdef#ifndef,分别表示“如果已定义”和“如果未定义”。#ifdef的一般形式如下:
#ifdef macro-name
 Statement sequence
#endif
如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。
#ifndef的一般形式是:
#ifndef macro-name
 Statement sequence
#endif
如果macro-name当前未被#define语句定义,则编译其中的代码块。
#ifdef#ifndef都可以使用#else#elif语句。
 
#inlucde <stdio.h>
#define T 10
 
Int main(void)
{
 #ifdef t
 Printf(“Hi T\n”);
 #else
 Printf(“Hi anyone\n”);
 #endif
 #ifndef M
 Printf(“M Not Defined\n”);
 #endif
 
 Return 0;
}
6.      #undef
#undef指令删除前面定义的宏名字。也就是说,它“不定义”宏。一般形式为:
#undef macro-name
7.      使用defined
#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下:
defined macro-name
如果macro-name是当前定义的,则表达式为真,否则为假。
例如,确定宏MY是否定义,可以使用下列两种预处理命令之一:
#if defined MY
#ifdef MY
也可以在defined之前加上感叹号”!”来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。
#if !defined DEBUG
 Printf(“Final Version!\n”);
#endif
使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。
8.      #line
#line指令改变__LINE____FILE__的内容。__LINE____FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。#line的一般形式是:
#line number “filename”
其中,number是正整数并变成__LINE__的新值;可选的“filename”是合法文件标识符并变成__FILE__的新值。#line主要用于调试和特殊应用。
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表