全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

列举一些成熟软件中C语言常用的宏定义

时间:2023-08-27 11:25

人气:

作者:admin

标签: C语言  LSB算法  存储器 

导读:写好C语言,漂亮的宏定义很重要!使用宏定义可以防止出错,提高可移植性,可读性,方便性等。...

使用宏定义可以防止出错,提高可移植性,可读性,方便性等。

下面列举了一些成熟软件中常用的宏定义。

重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植:


typedefunsignedcharboolean;/*Booleanvaluetype.*/
typedefunsignedlongintuint32;/*Unsigned32bitvalue*/
typedefunsignedshortuint16;/*Unsigned16bitvalue*/
typedefunsignedcharuint8;/*Unsigned8bitvalue*/
typedefsignedlongintint32;/*Signed32bitvalue*/
typedefsignedshortint16;/*Signed16bitvalue*/
typedefsignedcharint8;/*Signed8bitvalue*/

求最大值和最小值:


#defineMAX(x,y)(((x)>(y))?(x):(y))
#defineMIN(x,y)(((x)< (y)) ? (x) : (y) )

得到一个field在结构体(struct)中的偏移量:

#defineFPOS(type,field)
/*lint-e545*/((dword)&((type*)0)->field)/*lint+e545*/

得到一个结构体中field所占用的字节数:


#defineFSIZ(type,field)sizeof(((type*)0)->field)

按照LSB格式把两个字节转化为一个Word:

1#defineFLIPW(ray)((((word)(ray)[0])*256)+(ray)[1])

按照LSB格式把一个Word转化为两个字节:


#defineFLOPW(ray,val)
(ray)[0]=((val)/256);
(ray)[1]=((val)&0xFF)

得到一个变量的地址(word宽度):


#defineB_PTR(var)((byte*)(void*)&(var))
#defineW_PTR(var)((word*)(void*)&(var))

得到一个字的高位和低位字节:


#defineWORD_LO(xxx)((byte)((word)(xxx)&255))
#defineWORD_HI(xxx)((byte)((word)(xxx)>>8))

将一个字母转换为大写:

#defineUPCASE(c)(((c)>='a'&&(c)<= 'z') ? ((c) - 0x20) : (c) )

判断字符是不是10进制的数字:


#define DECCHK( c ) ((c) >= '0' && (c) <= '9')

判断字符是不是16进制的数字:


#defineHEXCHK(c)(((c)>='0'&&(c)<= '9') ||
((c) >='A'&&(c)<= 'F') ||
((c) >='a'&&(c)<= 'f') )

防止一个头文件被重复包含:


#ifndefCOMDEF_H
#defineCOMDEF_H
//头文件内容
#endif

防止溢出的一个方法:

#defineINC_SAT(val)(val=((val)+1>(val))?(val)+1:(val))

返回数组元素的个数:

791b04e0-4475-11ee-a2ef-92fbcf53809c.png

#defineARR_SIZE(a)(sizeof((a))/sizeof((a[0])))






审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信