查看原文
其他

HAL库中do{...} while(0U)宏定义的作用和意义

strongerHuang strongerHuang 2021-01-31

置顶/星标公众,不错过每一条消息!


    应部分老铁的要求,讲一些细节知识点。一来,我不用花费大量精力去写文章;二来,大家也不会因看文章觉得累。


1写在前面

很多初学者,以及有一定工作经验的朋友都不知道这个“do{...} while(0U)”作用和意义,甚至觉得这样写的代码复杂且没意义


相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句。


今天讲的主要知识点是:HAL库中do{...} while(0U)作用和意义


当然,do{...} while(0U) 不限于HAL库中,适用于很多地方。


2

HAL库中do{} while(0U)宏定义

在HAL库中,很多.h文件都有do{...} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:


对比在LL库中时钟使能代码,如下:


很多人只会觉得LL库这种函数比较合理,而想不明白为什么HAL会使用这种“do{...} while(0U)”宏定义的语句。


下一章节重点讲述一下这种“do{...} while(0U)”宏定义的作用和意义。


3

do{...} while(0U)宏定义的作用和意义

使用do{...} while(0U)这种方式其实有几种重要作用,下面简单说几条:


1.编译出错

不使用do{}while:


使用大括号,多一个分号:


使用do{...} while(0U):


大家对比以上几种,你觉得哪一种合理?


2.避免goto跳转语句带来问题

不使用do{}hwile(0):


使用do{}hwile(0):


大家再对比以上两种,发现了什么问题?


我这里也不再继续举例说明了,大家可以上网了解,其实还有很多重要意义和作用。


怎么说呢,点到为止,希望对你有启发。



推荐阅读:

1.STM32CubeMX V5.1.0来了

2.用心去学习STM32CubeMX,你会有不一样的收获


4最后

我的知乎:strongerHuang

我的网站:www.strongerhuang.com


若觉得文章对你有帮助,随手点“好看”、转发分享,也是我继续更新的动力。


扫描下面二维码、关注公众号,在底部菜单中查看更多精彩内容!


长按识别图中二维码关注

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存