【嵌入式C语言】--do{…}while(0)的学习

文章参考:(1条消息) C语言 -- do{…}while(0)的意义和用法_诸葛一帆丶的博客-CSDN博客

在学习STM32H743的代码过程中,经常碰到一些有关do{...}while(0)的宏定义。

如,在学习stm32h7xx_hal_rcc.h文件时,就有相关的宏定义:

#define                            __HAL_RCC_GPIOA_CLK_ENABLE()       do { \
                                        __IO uint32_t tmpreg; \
                                        SET_BIT(RCC->AHB4ENR, RCC_AHB4ENR_GPIOAEN);\
                                        /* Delay after an RCC peripheral clock enabling */ \
                                        tmpreg = READ_BIT(RCC->AHB4ENR, RCC_AHB4ENR_GPIOAEN);\
                                        UNUSED(tmpreg); \
                                       } while(0)

我们都知道do{...}while{0}循环只执行一次,那么宏定义中使用do{...}while{0}循环意义何在呢?以下为我在学习过程中的一些感悟。仅供参考。

1.将定义的复杂的宏用作一个整体来引用。 

举例,有时候在使用宏定义时,往往需要将多个C语句汇集到一起来定义一个宏。即使用宏定义来定义一个函数,用以实现某种功能,我们姑且称之为宏函数。如x,y比较大小,x大则x,y的值互换。反之x,y的值不互换。对此我们首先想到的宏定义使用方法为:

#define swap(x,y) temp=x; x=y; y=temp;     //定义宏函数。<

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值