【电子资讯】宏定义使用说明
对于宏定义还要说明以下几点:
①宏定义不是C语句,不用加分号,如果误加分号,则在编译时连同分号一起置换。如以下
错误定义:
#define PI 3.1415;
假设下面语句“s=PI*r*r;",宏展开后,该语句变为:
s=3.1415;* r. r;
显然出现语法错误。
②宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,它是一种简单的替换;字符串中可以含任何字符、常数、表达式,预处理程序对它不作任何检查。
③当宏定义在一行中写不下,需要在下一行继续写时,应该在最后一个字符后紧跟着加一个反斜线“\”,新的一行应从第1列开始书写,不能插人空格。例如:
共define AYEAR 12Month,30day\
* 24hour * 60min //新起一行从第1列开始13写
④宏名习惯用大写字母表示,以区别于变过名.ICCAVR编译器对源程序中用引号括起来的字符申内的字符、标号和标一识符,即使与宏名相同,也不进行置换。
⑤使用宏定义可以减少程序中重复书写某些比较长字符串的工作量;自己定义容易记忆,而几不容易出错。当需要改变某一个常量时,只要改变# define命令行就可以了。
⑥可用宏定义表示数据类型,使书写方便。例如:
#define UINT unsigned int
在程序中可用UINT作变量说明:
DINT*p //声明一个uns匆ned char类型的指针p
UINT*y //声明两个unsigned char类型的变量x和y
应注意用宏定义表示数据类型和用typedef定义数据说明符的区别:宏定义只是简单的字符串代换,是在预处理完成的;而typedef是在编译时处理的,它不是作简单的代换,二十对类型说明符重新命名,被命名的标识符具有类型定义说明的功能。例如:
#define UCHARI unsigned char *
typedef (unsigned char *)UCHAR2;
下面用UCHAR1和UCHAR2说明变量时就可以看出它们的区别:“UCHAR1 x,y;”在宏代换后变成“unsigned char * x,y;",这表示x是指unsigned char类型的的指针变量,而b则是unsigned char类型变量.而“UCHAR2 x,y;”语句在编译后表示x,y都是指向整型的指针变量。因为PIN2是一个类型说明符。由这个例子可见,在使用宏定义时要分外小心,以免出错。
电子街推荐阅读