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

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

3天内不再提示

do{...} while(0U) 这种代码的作用和意义

strongerHuang 来源:strongerHuang 作者:strongerHuang 2021-06-04 14:00 次阅读

在一些项目中,我们可能看到过很多,在学习的时候没有见过的代码,比如 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时钟

65bcab4a-c4b8-11eb-9e57-12bb97331649.jpg

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

65c9c73a-c4b8-11eb-9e57-12bb97331649.jpg

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

3

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

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

1.编译出错

不使用do{}while:

65d46a14-c4b8-11eb-9e57-12bb97331649.png

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

65ebcb14-c4b8-11eb-9e57-12bb97331649.jpg

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

65fc6e6a-c4b8-11eb-9e57-12bb97331649.jpg

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

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

不使用do{}hwile(0):

6606c112-c4b8-11eb-9e57-12bb97331649.jpg

使用do{}hwile(0):

6622dcbc-c4b8-11eb-9e57-12bb97331649.png

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

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

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

编辑:jq

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

    关注

    3

    文章

    4286

    浏览量

    62341
  • 代码
    +关注

    关注

    30

    文章

    4728

    浏览量

    68252
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51847
  • HAL
    HAL
    +关注

    关注

    2

    文章

    69

    浏览量

    12577

原文标题:项目中大量使用do{...} while(0U)的作用和意义

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32h5使用jlink调试器,在while (READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == 0U)这里超时的原因?

    ,然后淘宝买了个jlink的调试器,就想试下,结果连上后,发现程序会在rcc初始化的时候,在 while (READ_BIT(RCC->CR, RCC_CR_PLL1RDY) == 0U)这里超时,进errorhandler
    发表于 05-27 07:36

    STM32 RTX CAN封装库中while循环无法跳出是为什么?

    ;MCRCAN_MCR_RESET) != 0U); #defineCAN_MCR_RESET((uint16_t)0x8000)/*!< CAN software master
    发表于 04-19 07:58

    使用STM32F407 USB HOST遇到的疑问求解

    ; } } while ((USBx->GRSTCTLUSB_OTG_GRSTCTL_AHBIDL) == 0U); /* Core Soft Reset */ count = 0U
    发表于 04-03 06:11

    USB库函数里有些地方判断CID寄存器的bit8位,1或0执行不同操作,请问这位代表什么意思?

    ); } if ((dma == 0U) (hc->do_ping == 1U)) { (void)USB_DoPing(USBx, hc->ch_num); return HAL_OK; } }
    发表于 03-25 08:18

    交换芯片的作用意义

    交换芯片作为网络设备中的核心组件,其作用意义不可忽视。
    的头像 发表于 03-18 14:34 565次阅读

    FM0+ S6E1C-Series Starter Kit开发板,I2SL0口通过中断读取出的数据始终为0,播放音频可以是怎么回事?

    dB stcWm8731Reg.LLIN_f.LINMUTE = 1u;// Enable left channel line input mute stcWm8731Reg.LLIN_f.LRINBOTH = 0u
    发表于 02-21 06:47

    xmc1302使用官网的BLDC案例,一直出现卡在下面的函数出不来的原因?

    *) MOTOR0_BLDC_SCALAR_VADC_PHASEU_VOLTAGE_GRP); } while (vadc_conversion_status == 0U);希望各位大神指点一下,一直卡这里出不来,不知道什么原因
    发表于 02-18 08:18

    arduino中while循环怎么跳出

    Arduino 是一款开源的硬件平台,广泛应用于各种物联网和嵌入式系统项目。在 Arduino 上编写代码时,循环结构起到了至关重要的作用。而其中的 while 循环更是常用于需要根据特定条件重复
    的头像 发表于 02-14 16:22 2308次阅读

    while和if一起用的例子c语言

    一、 在C语言中,while和if是两个非常常用的控制语句。while用于创建循环结构,使得程序可以重复执行一段代码块,而if则是用于条件判断,根据不同的条件执行不同的代码块。当这两个
    的头像 发表于 11-22 10:09 4042次阅读

    c语言在while中嵌套if循环

    中嵌套if语句的用法和好处。 一、C语言中的while循环和if语句 在开始我们深入探讨while循环中嵌套if语句的细节之前,让我们首先回顾一下while循环和if语句的基本用法。 whil
    的头像 发表于 11-22 10:09 5501次阅读

    while与if嵌套如何使用

    嵌套是编程中常用的一种技术,它可以使代码在特定条件下执行不同的操作。在Python中,while循环和if条件语句经常被嵌套使用,以实现更复杂的程序逻辑。 首先,我们来看一下while循环和if语句
    的头像 发表于 11-22 10:06 3688次阅读

    python中while的用法例子

    出数字1到10。 计算1到10之间所有数字的总和: i = 1 total = 0 while i 10 :total += ii += 1 print (total) 在上面的代码中,我
    的头像 发表于 11-22 10:04 1709次阅读

    while循环用法格式

    while循环是一种常用的循环结构,能够按照指定条件多次重复执行一段代码。它的一般用法格式如下: while 条件表达式:循环体 在执行while循环时,首先会判断条件表达式的值。如果
    的头像 发表于 11-22 10:02 1672次阅读

    C语言中如何优化代码的执行效率

    : unsigned int i;i= 1000 ; do { i--; //用户程序 } while (i > 0 ); 在这两种循环中,使用do
    的头像 发表于 11-20 18:09 554次阅读

    do{...} while(0)的四大使用场景介绍

    这里只针对单核CPU,linux内核和其他一些开源的代码中,经常会遇到这样的代码
    的头像 发表于 11-14 12:18 1095次阅读