在一些項目中,我們可能看到過很多,在學(xué)習(xí)的時候沒有見過的代碼,比如 do{...} while(0U) 這種代碼,在我們學(xué)習(xí)的時候可能很少見,但實際項目中卻存在很多類似代碼。
今天就來講講關(guān)于 do{...} while(0U) 的內(nèi)容。
1
前言
很多初學(xué)者都不知道這個“do{...} while(0U)”作用和意義,甚至覺得這樣寫的代碼復(fù)雜且沒意義。
相信使用過STM32Cube HAL庫的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語句。 今天講的主要知識點是: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時鐘:

對比在LL庫中時鐘使能代碼,如下:

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

使用大括號,多一個分號:

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

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

使用do{}hwile(0):

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