0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

STM32嵌入式开发 来源:STM32嵌入式开发 2023-08-27 11:25 次阅读

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

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

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


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])))






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7428

    浏览量

    163507
  • C语言
    +关注

    关注

    180

    文章

    7591

    浏览量

    135815
  • LSB算法
    +关注

    关注

    0

    文章

    7

    浏览量

    5800

原文标题:写好C语言,漂亮的宏定义很重要!

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言定义使用技巧

    写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便性等等。下面
    发表于 07-29 09:35 1093次阅读

    C语言中常用定义

    写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便性等等。下面
    发表于 10-18 10:05 1638次阅读

    C语言定义的应用

    C语言中,定义种预处理指令,用于在代码定义
    发表于 08-17 15:33 718次阅读

    C语言定义的使用技巧

    #define命令是C语言中的定义命令,它用来将个标识符
    发表于 09-05 10:12 976次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中<b class='flag-5'>宏</b><b class='flag-5'>定义</b>的使用技巧

    C语言常用定义技巧(转)

    C语言常用定义技巧
    发表于 07-26 12:47

    c语言中常用定义有哪些?

    c语言中常用定义有哪些?
    发表于 04-28 06:01

    Linux内核GNU C扩展的一些常用C语言语法分析

    13.1 总结前面12节的课程,主要针对 Linux 内核 GNU C 扩展的一些常用 C 语言
    发表于 12-14 06:29

    C语言定义使用技巧

    写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便性 等等。下面
    发表于 11-13 12:04 36次下载

    ARM Linux中一些重要的及地址定义

    ARM Linux中一些重要的及地址定义
    的头像 发表于 06-22 17:02 2693次阅读

    一些成熟软件常用定义

    写好C语言,漂亮的定义很重要,使用定义可以防止出错,提高可移植性,可读性,方便 性等等。 下
    的头像 发表于 01-18 11:21 2330次阅读

    C语言中的定义

    #define命令是C语言中的定义命令,它用来将个标识符
    的头像 发表于 09-28 16:05 3376次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中的<b class='flag-5'>宏</b><b class='flag-5'>定义</b>

    C语言定义的使用原理

    使用STM32开发的朋友不知道是否有发现过这样的一些定义
    的头像 发表于 02-01 14:36 1547次阅读

    c语言定义可以嵌套吗?

    c语言定义可以嵌套吗? C语言
    的头像 发表于 09-04 17:38 3068次阅读

    c语言带参数的定义

    c语言带参数的定义  C语言
    的头像 发表于 09-04 17:45 2326次阅读

    列举一些C语言中常用定义

    写好C语言,使用定义可以防止出错,提高可移植性、可读性等。下文列举一些
    发表于 10-07 10:54 505次阅读
    <b class='flag-5'>列举</b><b class='flag-5'>一些</b><b class='flag-5'>C</b><b class='flag-5'>语言中常用</b>的<b class='flag-5'>宏</b><b class='flag-5'>定义</b>