在一些項(xiàng)目中,我們可能看到過很多,在學(xué)習(xí)的時(shí)候沒有見過的代碼,比如 do{...} while(0U) 這種代碼,在我們學(xué)習(xí)的時(shí)候可能很少見,但實(shí)際項(xiàng)目中卻存在很多類似代碼。
今天就來(lái)講講關(guān)于 do{...} while(0U) 的內(nèi)容。
1
前言
很多初學(xué)者都不知道這個(gè)“do{...} while(0U)”作用和意義,甚至覺得這樣寫的代碼復(fù)雜且沒意義。
相信使用過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ì)覺得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)單說幾條:
1.編譯出錯(cuò)
不使用do{}while:
使用大括號(hào),多一個(gè)分號(hào):
使用do{...} while(0U):
大家對(duì)比以上幾種,你覺得哪一種合理?
2.避免goto跳轉(zhuǎn)語(yǔ)句帶來(lái)問題
不使用do{}hwile(0):
使用do{}hwile(0):
大家再對(duì)比以上兩種,發(fā)現(xiàn)了什么問題?
我這里也不再繼續(xù)舉例說明了,大家可以上網(wǎng)了解,其實(shí)還有很多重要意義和作用。
怎么說呢,點(diǎn)到為止,希望對(duì)你有啟發(fā)。
編輯:jq
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4327瀏覽量
62569 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051 -
HAL
+關(guān)注
關(guān)注
2文章
70瀏覽量
12607
原文標(biāo)題:項(xiàng)目中大量使用do{...} while(0U)的作用和意義
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論