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

    文章

    7148

    浏览量

    161986
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128708
  • LSB算法
    +关注

    关注

    0

    文章

    7

    浏览量

    5778

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

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

收藏 人收藏

    评论

    相关推荐

    C语言定义使用技巧

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

    C语言中常用的宏定义

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

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

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

    C语言定义技巧

    C语言定义技巧
    发表于 03-01 21:58

    C语言定义#和##的作用

    #和##的作用是:前者将定义的变量转化为字符串;后者将其前后的两个定义的两个变量无缝拼接在
    发表于 08-23 18:22

    C语言中的

    定义是我们C语言学习中非常重要的内容。一些基础的用法大家都比较清楚了,我们简单总结下。1.
    发表于 12-13 15:32

    请问能否麻烦列举一些比较常用的可做滤波电路的芯片?

    TI的工程师们能否麻烦你们列举一些比较常用的可做滤波电路的芯片。之前用FilterPro软件设计出来的电路效果挺不错的,但在芯片的选择上就
    发表于 03-07 13:13

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

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

    【通信专栏】附录:STM32单片机C语言基础/逻辑运算/按位运算/结构体/定义 精选资料分享

    在单片机开发,总有一些C语言基础知识是常常用到的而我们又不易掌握的,今天以STM32单片机为例,总结
    发表于 07-21 08:28

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

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

    介绍C语言的预处理知识与定义原理

    系统平台上的gcc)前言本篇文章将会向大家介绍C语言的预处理知识、定义、函数、以及编译执行程序所需的静态链接库和动态链接库的
    发表于 02-11 06:35

    C语言定义使用do{}while(0)的好处是什么

    do{}while(0)这种用法呢?主要有两点原因,个是代码适应性以及拓展性,第二个是为了尽量避免一些不必要的语法和逻辑错误。比如保证你定义的函数能够在形如if...else的语句
    发表于 02-25 06:28

    C语言定义使用技巧

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

    一些成熟软件常用的宏定义

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

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

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