日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

do{...} while(0U) 這種代碼的作用和意義

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-06-04 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在一些項目中,我們可能看到過很多,在學習的時候沒有見過的代碼,比如 do{...} while(0U) 這種代碼,在我們學習的時候可能很少見,但實際項目中卻存在很多類似代碼。

今天就來講講關(guān)于 do{...} while(0U) 的內(nèi)容。

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時鐘

65bcab4a-c4b8-11eb-9e57-12bb97331649.jpg

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

65c9c73a-c4b8-11eb-9e57-12bb97331649.jpg

很多人只會覺得LL庫這種函數(shù)比較合理,而想不明白為什么HAL會使用這種“do{...} while(0U)”宏定義的語句。 下一章節(jié)重點講述一下這種“do{...} while(0U)”宏定義的作用和意義。

3

do{...} while(0U)宏定義的作用和意義

使用do{...} while(0U)這種方式其實有幾種重要作用,下面簡單說幾條:

1.編譯出錯

不使用do{}while:

65d46a14-c4b8-11eb-9e57-12bb97331649.png

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

65ebcb14-c4b8-11eb-9e57-12bb97331649.jpg

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

65fc6e6a-c4b8-11eb-9e57-12bb97331649.jpg

大家對比以上幾種,你覺得哪一種合理?

2.避免goto跳轉(zhuǎn)語句帶來問題

不使用do{}hwile(0):

6606c112-c4b8-11eb-9e57-12bb97331649.jpg

使用do{}hwile(0):

6622dcbc-c4b8-11eb-9e57-12bb97331649.png

大家再對比以上兩種,發(fā)現(xiàn)了什么問題?

我這里也不再繼續(xù)舉例說明了,大家可以上網(wǎng)了解,其實還有很多重要意義和作用。

怎么說呢,點到為止,希望對你有啟發(fā)。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4422

    瀏覽量

    67871
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74419
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1334

    瀏覽量

    56478
  • HAL
    HAL
    +關(guān)注

    關(guān)注

    2

    文章

    75

    瀏覽量

    13751

原文標題:項目中大量使用do{...} while(0U)的作用和意義

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    S32K148 FlexCAN模塊無法接收遠程幀,為什么?

    buffCfg = { .enableFD = 假, .enableBRS = false, .fdPadding = 0U, .idType = CAN_MSG_ID_STD, .isRemote
    發(fā)表于 04-24 06:55

    將 WAKEUP 引腳用作普通GPIO13_IO0,LPUART2有問題,怎么解決?

    (gpc_cpu_mode_ctrl); gpio_pin_config_t USER_Pin_config = { .direction = kGPIO_DigitalInput, .輸出邏輯 = 0U
    發(fā)表于 04-24 06:25

    S32K314導入ECC公鑰ImportEccKeyReq函數(shù)返回錯誤0x055A5A399怎么解決?

    , 1U, WRP_ECC_KEY_SIZE}, { 0U, 0U, 0U, 0U, 0U
    發(fā)表于 03-16 07:06

    S32K3 OTA 演示示例在 EVB 上復位后無法啟動S32K358怎么解決?

    )。用于OTA無源映像 */ 2. 在 main() 中 uint8_t DCMOTAR = 0u;0:低地址,1:高地址 uint8_t DCMOTAA = 0u;0:非活動,1:活
    發(fā)表于 03-06 07:59

    ADC單通道的轉(zhuǎn)換

    ); while(1) { #ifdef SGL_MORE_MODE_EN while(!(gFlagIrqADC_ISR_EOA_Msk)); gFlagIrq = 0u; ADC_GetAccResult
    發(fā)表于 01-27 10:42

    深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

    U-Boot中Android Bootloader的核心實現(xiàn),核心作用是 銜接硬件初始化與內(nèi)核啟動 ,主要負責: ?讀寫B(tài)ootloader控制塊(BCB),判斷設備啟動
    的頭像 發(fā)表于 01-22 07:06 ?510次閱讀
    深入解析rk平臺Android Bootloader核心<b class='flag-5'>代碼</b>:從啟動流程到AVB驗證

    c語言中的代碼優(yōu)化

    } while (i>0); 在這兩種循環(huán)中,使用dowhile循環(huán)編譯后生成的代碼的長度短于
    發(fā)表于 01-12 09:45

    C語言中實現(xiàn)函數(shù)宏的三種方式

    在宏的第一個分號后便結(jié)束。即 a = b 和 b = tmp 均不受控制語句所作用。 因此,在工程中,一般使用三種方式來對函數(shù)宏進行封裝,分別為 {}、do{...}while(0
    發(fā)表于 12-29 07:34

    星海FR系列三種封裝快恢復二極管DO-15、DO-201AD、R-6的全面對比與應用解析

    星海FR系列快恢復二極管憑借其卓越的性能和多樣化的封裝形式,深受工程師和電子愛好者的青睞。這里,星海授權(quán)代理商南山電子將對對星海FR系列三種封裝快恢復二極管:DO-15、DO-201AD、R-6
    的頭像 發(fā)表于 12-18 16:25 ?789次閱讀
    星海FR系列三種封裝快恢復二極管<b class='flag-5'>DO</b>-15、<b class='flag-5'>DO</b>-201AD、R-6的全面對比與應用解析

    【瑞薩RA6E2地奇星開發(fā)板試用】+ 2.串口打印測試

    ) { unsigned int k=0; do { uart0_Send_Byte ((str + k)); k++; } while(k < strlen); } void
    發(fā)表于 12-08 16:41

    深入理解?RK3506 U-Boot?重定位:從代碼到原理

    ?U-Boot?代碼從初始加載地址(通常是片內(nèi)?ROM?或?Flash)復制到運行效率更高的片外?RAM,再切換執(zhí)行環(huán)境到?RAM?中運行。 本文將結(jié)合?U-Boot?源碼中?ARM Cortex?核心
    的頭像 發(fā)表于 11-28 07:05 ?1025次閱讀
    深入理解?RK3506 <b class='flag-5'>U</b>-Boot?重定位:從<b class='flag-5'>代碼</b>到原理

    rt_mq_recv函數(shù)中timeout作用是什么?

    的值,并不被使用。 請問下這部分代碼作用是什么了? /* message queue is empty */ while (mq-&gt;entry == 0
    發(fā)表于 09-29 06:27

    求助,關(guān)于rt-smart用戶態(tài)線程實時性差的問題求解

    timespec period = {0U, 50000U}; /* 5.0E-5 seconds */ int step_sem_value; int i; (void)param_unused
    發(fā)表于 09-26 08:25

    請問如何創(chuàng)建在 RAM 區(qū)域完全獨立運行的閃存驅(qū)動程序代碼?

    Pattern Requirements) */ SCU_WDTS_CON0.U = (1 << 0u) | (0 << 1u
    發(fā)表于 07-25 07:33

    【RA-Eco-RA6M4開發(fā)板評測】2、I2C外設驅(qū)動OLED屏幕和移植u8g2

    Delay的回調(diào)函數(shù)實現(xiàn); 與通訊接口(比如I2C、SPI)相關(guān)的數(shù)據(jù)傳輸回調(diào)函數(shù)。 這兩個函數(shù)的實現(xiàn)在u8g2 Wiki手冊中可以找到相關(guān)的代碼實現(xiàn)模板。 移植u8g2 在RASC中設置開發(fā)板的I2C
    發(fā)表于 07-23 13:51
    盐边县| 广元市| 吉林省| 富顺县| 兴海县| 盘山县| 宁国市| 邵阳市| 蒲城县| 溆浦县| 蛟河市| 阳曲县| 定襄县| 兰考县| 秭归县| 南木林县| 玉田县| 肃北| 泽州县| 光泽县| 陇南市| 宿州市| 北辰区| 玛曲县| 舞阳县| 连江县| 郁南县| 岳阳县| 大洼县| 苏州市| 安多县| 双牌县| 荔浦县| 星座| 彭泽县| 天峻县| 克拉玛依市| 游戏| 淳安县| 郧西县| 鹿邑县|