項目中大量使用do{...} while(0U)的作用和意義
在一些項目中,我們可能看到過很多,在學習的時候沒有見過的代碼,比如 do{...} while(0U) 這種代碼,在我們學習的時候可能很少見,但實際項目中卻存在很多類似代碼。
今天就來講講關于 do{...} while(0U) 的內容。
1. 前言
很多初學者都不知道這個“do{...} while(0U)”作用和意義,甚至覺得這樣寫的代碼復雜且沒意義。
相信使用過STM32Cube HAL庫的朋友都知道,源碼里面有許多do{...} while(0U)的宏定義語句。
今天講的主要知識點是:HAL庫中do{...} while(0U)作用和意義。
當然,do{...} while(0U) 不限于HAL庫中,適用于很多地方。
2. HAL庫中do{} while(0U)宏定義
在HAL庫中,很多.h文件都有do{...} while(0U)這樣的宏定義,比如:在stm32f1xx_hal_rcc.h中,使能GPIO時鐘:
對比在LL庫中時鐘使能代碼,如下:
很多人只會覺得LL庫這種函數比較合理,而想不明白為什么HAL會使用這種“do{...} while(0U)”宏定義的語句。
下一章節重點講述一下這種“do{...} while(0U)”宏定義的作用和意義。
3. do{...} while(0U)宏定義的作用和意義
使用do{...} while(0U)這種方式其實有幾種重要作用,下面簡單說幾條:
(1)編譯出錯
不使用do{}while:
使用大括號,多一個分號:
使用do{...} while(0U):
大家對比以上幾種,你覺得哪一種合理?
(2)避免goto跳轉語句帶來問題
不使用do{}hwile(0):
使用do{}hwile(0):
大家再對比以上兩種,發現了什么問題?
我這里也不再繼續舉例說明了,大家可以上網了解,其實還有很多重要意義和作用。
怎么說呢,點到為止,希望對你有啟發。