在很多嵌入式项目中,都存在 do{...} while(0U) 这种的代码,在我们学习的时候可能很少见,但实际项目中却存在很多类似代码。今天就给大家讲一讲关于 do{...} while(0U) 的内容。
很多初学者都不知道这个“do{...} while(0U)”作用和意义,甚至觉得这样写的代码复杂且没意义。相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句。今天讲的主要知识点是:HAL库中do{...} while(0U)作用和意义。当然,do{...} while(0U) 不限于HAL库中,适用于很多地方。
在HAL库中,很多.h文件都有do{...} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:对比在LL库中时钟使能代码,如下:
很多人只会觉得LL库这种函数比较合理,而想不明白为什么HAL会使用这种“do{...} while(0U)”宏定义的语句。下一章节重点讲述一下这种“do{...} while(0U)”宏定义的作用和意义。
do{...} while(0U)宏定义的作用和意义
使用do{...} while(0U)这种方式其实有几种重要作用,下面简单说几条:
1、编译出错
不使用do{}while:
使用大括号,多一个分号:
使用do{...} while(0U):
2、避免goto跳转语句带来问题
不使用do{}hwile(0):
使用do{}hwile(0):
我这里也不再继续举例说明了,大家可以上网了解,其实还有很多重要意义和作用。