在一些项目中,我们可能看到过很多,在学习的时候没有见过的代码,比如 do{...} while(0U) 这种代码,在我们学习的时候可能很少见,但实际项目中却存在很多类似代码。
今天就来讲讲关于 do{...} while(0U) 的内容。
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):

大家再对比以上两种,发现了什么问题?
我这里也不再继续举例说明了,大家可以上网了解,其实还有很多重要意义和作用。
怎么说呢,点到为止,希望对你有启发。
编辑:jq
-
函数
+关注
关注
3文章
4423浏览量
68034 -
代码
+关注
关注
30文章
4983浏览量
74533 -
GPIO
+关注
关注
16文章
1336浏览量
56587 -
HAL
+关注
关注
2文章
75浏览量
13787
原文标题:项目中大量使用do{...} while(0U)的作用和意义
文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
FlexPWM 输出在 RT1060 上不起作用是怎么回事?如何解决?
S32K148 FlexCAN模块无法接收远程帧,为什么?
将 WAKEUP 引脚用作普通GPIO13_IO0,LPUART2有问题,怎么解决?
S32K314导入ECC公钥ImportEccKeyReq函数返回错误0x055A5A399怎么解决?
S32K3 OTA 演示示例在 EVB 上复位后无法启动S32K358怎么解决?
ADC单通道的转换
深入解析rk平台Android Bootloader核心代码:从启动流程到AVB验证
C语言中实现函数宏的三种方式
【瑞萨RA6E2地奇星开发板试用】+ 2.串口打印测试
深入理解 RK3506 U-Boot 重定位:从代码到原理
do{...} while(0U) 这种代码的作用和意义
评论