首页 理论教育KeilCx51编译器的条件编译命令及使用格式

KeilCx51编译器的条件编译命令及使用格式

【摘要】:Keil Cx51编译器的预处理器提供以下的条件编译命令:#if、#elif、#else、#endif、#ifdef、#ifndef,这些命令有3种使用格式,分述如下。当然还可以仿照这段程序设计出其他多种条件编译。格式三这种格式条件编译的功能是:如果常量表达式1的值为真(非0)则程序段1参加编译,然后转至#endif命令,结束本次条件编译;否则,如果常量表达式1的值为假,则忽略掉程序段1,而进入下面的一个#elif命令,对常量表达式2的值进行判断。

一般情况下,对C语言程序进行编译时所有的程序都参加编译,但有时希望对其中一部分内容只在满足一定条件时才进行编译,这就是所谓的条件编译。条件编译可以选择不同的编译范围,从而产生不同的代码。Keil Cx51编译器的预处理器提供以下的条件编译命令:#if、#elif、#else、#endif、#ifdef、#ifndef,这些命令有3种使用格式,分述如下。

格式一

该命令格式的功能是:如果指定的标识符已被定义,则程序段1参加编译并产生有效代码,而忽略掉程序段2,否则程序段2参加编译并产生有效代码而忽略掉程序段1。其中#else和程序段2可以没有。这里的程序段可以是C语言的语句组,也可以是命令行

这种条件编译对于提高C语言源程序的通用性是很有好处的。例如,对工作于6MHz和12MHz时钟频率下的8051和8052单片机,可以采用如下的条件编译使编写的程序具有通用性:

这样,后面的源程序不做任何修改就可以适用于两种时钟频率的单片机系统。当然还可以仿照这段程序设计出其他多种条件编译。

格式二(www.chuimin.cn)

该命令格式与第一种命令格式只在第一行上不同,它的作用与第一种刚好相反,即如果指定的标识符未被定义,则程序段1参加编译并产生有效代码,而忽略掉程序段2,否则程序段2参加编译并产生有效代码而忽略掉程序段1。

以上两种格式的用法也很相似,可视实际情况而定。例如,对于上面的例子也可以采用如下的条件编译:

其效果是完全一样的。

格式三

这种格式条件编译的功能是:如果常量表达式1的值为真(非0)则程序段1参加编译,然后转至#endif命令,结束本次条件编译;否则,如果常量表达式1的值为假(0),则忽略掉程序段1(不参加编译),而进入下面的一个#elif命令,对常量表达式2的值进行判断。如果常量表达式2的值为假(0),则转至下一个#elif命令。如此进行,直到遇到#else或#endif命令为止。使用这种条件编译格式可以事先给定某一个条件,使程序在不同的条件下完成不同的功能。