首页 理论教育 条件编译在AVR单片机开发中的应用

条件编译在AVR单片机开发中的应用

时间:2023-10-17 理论教育 版权反馈
【摘要】:使用条件编译命令可以使用户有选择地按不同的条件去编译不同的程序部分,只有满足一定条件才能进行编译,从而产生不同的目标代码文件。常用的条件编译命令有三种形式。在程序第一行宏定义中,定义R为1,因此在条件编译时,常量表达式的值为真,故计算并输出圆面积。但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。

条件编译在AVR单片机开发中的应用

预处理程序提供了条件编译的功能。使用条件编译命令可以使用户有选择地按不同的条件去编译不同的程序部分,只有满足一定条件才能进行编译,从而产生不同的目标代码文件。这对于程序的移植和调试是很有用的,提高了程序的通用性。

常用的条件编译命令有三种形式。

1.#ifdef命令

一般形式为:

它的功能是,如果标识符已被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:

条件编译的作用主要是提高程序的通用性,例如有的计算机存放一个整数需要16位,而有的计算机需要32位,为使所编程序能够在两种计算机上通用,程序中可使用如下条件编译命令:

如果在前面定义过,则编译语句#defineINT_SIZE16,否则将编译语句#define INT_SIZE32。这样,源程序不必作任何修改,只要增加或删除语句#definePC,就可以使程序运行于不同的计算机系统。

条件编译也常用于程序的调试,例如在调试程序时,常常希望输出一些中间信息,而在调试完成后不要输出这些信息,为此可在源程序的相应位置上插入形式如下的条件编译段:

如果前面对DEBUG进行了定义,即有:

则在程序运行时显示a、b的值,以便作调试分析。程序调试完成后,只要删去DEBUG的定义,则上述printf语句就不参加编译,程序运行时就不再显示a、b的值。(www.xing528.com)

2.#ifndef命令

一般形式为:

与第一种形式的区别是将“ifdef”改为“ifndef”。其功能是当标识符未被#define命令定义时则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反,两者用法完全相同,可根据需要任选一种。

3.#if命令

一般形式为:

需要注意的是if后面的表达式为常量表达式。该命令的功能是:如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译。其中,#else部分也可缺省,可简写为如下形式:

该命令可以使程序在不同条件下,完成不同的功能。

在程序第一行宏定义中,定义R为1,因此在条件编译时,常量表达式的值为真,故计算并输出圆面积。上面介绍的条件编译当然也可以用条件语句来实现。但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。因此,如果条件选择的程序段很长,采用条件编译的方法是十分必要的。

条件编译还可以嵌套,特别是为了描述#else后的程序段又是条件编译的情况,又引入预处理命令#elif,它的含义是#elseif。因此条件编译预处理更一般的形式为:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈