良许Linux教程网 干货合集 项目中大量使用do{…} while(0U)的作用和意义

项目中大量使用do{…} while(0U)的作用和意义

在某些项目中,我们经常会遇到一些我们自己未曾遇到的代码,例如 do{…} while(0U) 这类代码,这在学习过程中可能不常见,但在实际的项目中却存在着很多类似的代码。

本文将详细讲解 do{…} while(0U) 的相关内容。

1. 前言

很多刚开始学习的人们可能不知道 “do{…} while(0U)” 的用途和含义,甚至觉得这种代码写法繁琐且不必要。

但是,使用过STM32Cube HAL库的用户应该就能够理解,在HAL库的源代码中,存在大量这样的宏定义语句。

本文的主旨内容是:解读HAL库中 do{…} while(0U) 的作用及意义。

当然,do{…} while(0U) 不仅限于HAL库,在很多地方也有着广泛应用。

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

在HAL库中,许多 .h 文件都包含了 do{…} while(0U) 的宏定义,例如当我们需要使能GPIO时钟时在 stm32f1xx_hal_rcc.h 文件中:

image-20231122211659270
image-20231122211659270

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

image-20231122211702196
image-20231122211702196

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

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

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

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

1.编译出错

不使用do{}while:

image-20231122211705204
image-20231122211705204

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

image-20231122211707908
image-20231122211707908

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

image-20231122211710459
image-20231122211710459

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

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

不使用do{}hwile(0):

image-20231122211715319
image-20231122211715319

使用do{}hwile(0):

image-20231122211719031
image-20231122211719031

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

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

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部