欢迎来到天天文库
浏览记录
ID:35294298
大小:96.14 KB
页数:26页
时间:2019-03-23
《c语言必学宏定义的一些使用技巧总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、我在写代码的时候喜欢使用宏,不仅使代码看起来整洁,而且用好了还能极大的减轻编码的工作量,但是如果使用不当的话,出了问题查找起来就就非常的难了,下面的总结大部分是从网上看到的,也有一些是我自己在工作中总结出来的。宏使用中的常见的基础问题1.防止一个头文件被重复包含#ifndefBODYDEF_H#defineBODYDEF_H//头文件内容#endif2.重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedefunsignedcharboolean;/*Booleantype.*/typedefunsignedl
2、onguint32;/*Unsigned32bit*/typedefunsignedshortuint16;/*Unsigned16bit*/typedefunsignedcharuint8;/*Unsigned8bit*/typedefsignedlongintint32;/*Signed32bit*/typedefsignedshortint16;/*Signed16bit*/typedefsignedcharint8;/*Signed8bit*///下面的不建议使用typedefunsignedcharbyte;/*Unsigned8bittyp
3、e.*/typedefunsignedshortword;/*Unsinged16bittype.*/typedefunsignedlongdword;/*Unsigned32bittype.*/typedefunsignedcharuint1;/*Unsigned8bittype.*/typedefunsignedshortuint2;/*Unsigned16bittype.*/typedefunsignedlonguint4;/*Unsigned32bittype.*/typedefsignedcharint1;/*Signed8bittype.*
4、/typedefsignedshortint2;/*Signed16bittype.*/typedeflongintint4;/*Signed32bittype.*/typedefsignedlongsint31;/*Signed32bit*/typedefsignedshortsint15;/*Signed16bit*/typedefsignedcharsint7;/*Signed8bit*/3.得到指定地址上的一个字节或字#defineMEM_B(x)(*((uint8*)(x)))#defineMEM_W(x)(*((uint16*)(x)))4
5、.得到一个field在结构体(struct)中的偏移量#defineFPOS(type,field)((uint32)&((type*)0)->field)5.得到一个结构体中field所占用的字节数#defineFSIZ(type,field)sizeof(((type*)0)->field)6.求最大值和最小值#defineMAX(x,y)(((x)>(y))?(x):(y))#defineMIN(x,y)(((x)<(y))?(x):(y))7.得到一个变量的地址#defineB_PTR(var)((byte*)(void*)&(var))#de
6、fineW_PTR(var)((word*)(void*)&(var))8.按照LSB格式把两个字节转化为一个Word#defineFLIPW(ray)((((word)(ray)[0])*256)+(ray)[1])9.按照LSB格式把一个Word转化为两个字节#defineFLOPW(ray,val)(ray)[0]=((val)/256);(ray)[1]=((val)&0xFF)10.得到一个字的高位和低位字节#defineWORD_LO(***)((byte)((word)(***)&0xFF))#defineWORD_HI(***)((
7、byte)((word)(***)>>8))11.将一个字母转换为大写#defineUPCASE(c)(((c)>='a'&&(c)<='z')?((c)-0x20):(c))12.判断字符是不是10进值的数字#defineDECCHK(c)((c)>='0'&&(c)<='9')13.判断字符是不是16进值的数字#defineHEXCHK(c)(((c)>='0'&&(c)<='9')
8、
9、((c)>='A'&&(c)<='F')
10、
11、((c)>='a'&&(c)<='f'))14.防止溢出的一个方法#defineINC_SAT(val)(val=(
12、(val)+1>(val))?(val)+1:(val))15.返回数组元素的个数#defin
此文档下载收益归作者所有