應(yīng)部分老鐵的要求,講一些細(xì)節(jié)知識(shí)點(diǎn)。一來,我不用花費(fèi)大量精力去寫文章;二來,大家也不會(huì)因看文章覺得累。
1寫在前面
很多初學(xué)者,以及有一定工作經(jīng)驗(yàn)的朋友都不知道這個(gè)“do{...} while(0U)”作用和意義,甚至覺得這樣寫的代碼復(fù)雜且沒意義。
相信使用過STM32Cube HAL庫的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語句。
今天講的主要知識(shí)點(diǎn)是:HAL庫中do{...} while(0U)作用和意義。
當(dāng)然,do{...} while(0U)不限于HAL庫中,適用于很多地方。
2
HAL庫中do{} while(0U)宏定義
在HAL庫中,很多.h文件都有do{...} while(0U)這樣的宏定義,比如:在stm32f1xx_hal_rcc.h中,使能GPIO時(shí)鐘:

對(duì)比在LL庫中時(shí)鐘使能代碼,如下:

很多人只會(huì)覺得LL庫這種函數(shù)比較合理,而想不明白為什么HAL會(huì)使用這種“do{...} while(0U)”宏定義的語句。
下一章節(jié)重點(diǎn)講述一下這種“do{...} while(0U)”宏定義的作用和意義。
3
do{...} while(0U)宏定義的作用和意義
使用do{...} while(0U)這種方式其實(shí)有幾種重要作用,下面簡單說幾條:
1.編譯出錯(cuò)
不使用do{}while:

使用大括號(hào),多一個(gè)分號(hào):

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

大家對(duì)比以上幾種,你覺得哪一種合理?
2.避免goto跳轉(zhuǎn)語句帶來問題
不使用do{}hwile(0):

使用do{}hwile(0):

大家再對(duì)比以上兩種,發(fā)現(xiàn)了什么問題?
我這里也不再繼續(xù)舉例說明了,大家可以上網(wǎng)了解,其實(shí)還有很多重要意義和作用。
怎么說呢,點(diǎn)到為止,希望對(duì)你有啟發(fā)。
-
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9382 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
289瀏覽量
17248 -
HAL庫
+關(guān)注
關(guān)注
1文章
121瀏覽量
7543
發(fā)布評(píng)論請(qǐng)先 登錄
C語言中實(shí)現(xiàn)函數(shù)宏的三種方式
立即在GitHub上搶先體驗(yàn)面向STM32U5的最新STM32Cube HAL更新
RT_USING_TIMER_SOFT宏定義是否一定要開啟?
SConscript結(jié)果與rtconfig.h中宏定義相反,是什么原因呢?
wiced_hal_sflash_write在CYW20721B2上不起作用是怎么回事?
基于STM32 HAL庫與標(biāo)準(zhǔn)庫的esp8266接入機(jī)智云方案(二)
HAL庫中do{...} while(0U) 宏定義的作用和意義
評(píng)論