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

在一些项目中,项目我们可能看到过很多,中大作用在学习的量使时候没有见过的代码,比如 do{ ...} while(0U) 这种代码,用d义在我们学习的和意时候可能很少见,但实际项目中却存在很多类似代码。项目

今天就来讲讲关于 do{ ...} while(0U) 的中大作用内容。

1. 前言

很多初学者都不知道这个“do{ ...} while(0U)”作用和意义,量使甚至觉得这样写的用d义代码复杂且没意义。

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

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

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

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):

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

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

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

高防服务器
域名
上一篇:数据中心应该使用哪种布线方式?
下一篇:如何基于Nginx搭建流媒体服务器