在许多嵌入式项目中,经常会遇到类似这样的代码片段:do{…} while(0U)。尽管我们在学习的过程中可能很少见到它,但实际项目中却广泛存在着类似的代码。
现在,我来详细介绍一下关于do{…} while(0U)的内容。
1. 概述
很多初学者对于”do{…} while(0U)”的作用和意义并不了解,甚至觉得这样书写的代码很复杂且毫无意义。
然而,使用过STM32Cube HAL库的朋友都应该知道,在它的源代码中存在着许多使用do{…} while(0U)宏定义语句的情况。
今天我要讲解的核心知识点是:HAL库中do{…} while(0U)的作用和意义。
当然,do{…} while(0U)并不仅限于HAL库,它在许多其他场合也可以使用。
2HAL库中do{} while(0U)宏定义
在HAL库中,很多.h文件都有do{…} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:
对比在LL库中时钟使能代码,如下:
很多人只会觉得LL库这种函数比较合理,而想不明白为什么HAL会使用这种“do{…} while(0U)”宏定义的语句。
下一章节重点讲述一下这种“do{…} while(0U)”宏定义的作用和意义。
3do{…} while(0U)宏定义的作用和意义
使用do{…} while(0U)这种方式其实有几种重要作用,下面简单说几条:
1.编译出错
不使用do{}while:
使用大括号,多一个分号:
使用do{…} while(0U):
大家对比以上几种,你觉得哪一种合理?
2.避免goto跳转语句带来问题
不使用do{}hwile(0):
使用do{}hwile(0):
大家再对比以上两种,发现了什么问题?
我这里也不再继续举例说明了,大家可以上网了解,其实还有很多重要意义和作用。
怎么说呢,点到为止,希望对你有启发。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !