在一些項(xiàng)目中,我們可能看到過(guò)很多,在學(xué)習(xí)的時(shí)候沒(méi)有見(jiàn)過(guò)的代碼,比如 do{...} while(0U) 這種代碼,在我們學(xué)習(xí)的時(shí)候可能很少見(jiàn),但實(shí)際項(xiàng)目中卻存在很多類似代碼。
今天就來(lái)講講關(guān)于 do{...} while(0U) 的內(nèi)容。
1
前言
很多初學(xué)者都不知道這個(gè)“do{...} while(0U)”作用和意義,甚至覺(jué)得這樣寫的代碼復(fù)雜且沒(méi)意義。
相信使用過(guò)STM32Cube HAL庫(kù)的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語(yǔ)句。 今天講的主要知識(shí)點(diǎn)是:HAL庫(kù)中do{...} while(0U)作用和意義。 當(dāng)然,do{...} while(0U)不限于HAL庫(kù)中,適用于很多地方。
2
HAL庫(kù)中do{} while(0U)宏定義
在HAL庫(kù)中,很多.h文件都有do{...} while(0U)這樣的宏定義,比如:在stm32f1xx_hal_rcc.h中,使能GPIO時(shí)鐘:

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

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

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

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

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

使用do{}hwile(0):

大家再對(duì)比以上兩種,發(fā)現(xiàn)了什么問(wèn)題?
我這里也不再繼續(xù)舉例說(shuō)明了,大家可以上網(wǎng)了解,其實(shí)還有很多重要意義和作用。
怎么說(shuō)呢,點(diǎn)到為止,希望對(duì)你有啟發(fā)。
編輯:jq
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67532 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73998 -
GPIO
+關(guān)注
關(guān)注
16文章
1329瀏覽量
56232 -
HAL
+關(guān)注
關(guān)注
2文章
75瀏覽量
13669
原文標(biāo)題:項(xiàng)目中大量使用do{...} while(0U)的作用和意義
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
ADC單通道的轉(zhuǎn)換
深入解析rk平臺(tái)Android Bootloader核心代碼:從啟動(dòng)流程到AVB驗(yàn)證
C語(yǔ)言中實(shí)現(xiàn)函數(shù)宏的三種方式
【瑞薩RA6E2地奇星開發(fā)板試用】+ 2.串口打印測(cè)試
深入理解?RK3506 U-Boot?重定位:從代碼到原理
rt_mq_recv函數(shù)中timeout作用是什么?
求助,關(guān)于rt-smart用戶態(tài)線程實(shí)時(shí)性差的問(wèn)題求解
請(qǐng)問(wèn)如何創(chuàng)建在 RAM 區(qū)域完全獨(dú)立運(yùn)行的閃存驅(qū)動(dòng)程序代碼?
【RA-Eco-RA6M4開發(fā)板評(píng)測(cè)】2、I2C外設(shè)驅(qū)動(dòng)OLED屏幕和移植u8g2
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
同步整流芯片U7269的工作原理
do{...} while(0U) 這種代碼的作用和意義
評(píng)論