日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

合理或违规

發布時間:2025/4/16 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 合理或违规 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從一些經典代碼中常常看到宏中使用do...while(0)的用法,感覺上do...while(0)只是在有可能要中途跳出后續一段代碼的時候替換goto的一種用法,其他的就不求甚解了。

今天總算看到了wiki上對do...while(0)的解釋,算是解了心中的一個疑惑。

一種情況是,這種用法可以避免在if/for下使用宏時,由于宏中的多個語句遺漏大括號而造成流程錯誤。就像下面這一段代碼,可算是個明顯的錯誤了。


? #define?DO_SOMETHING()??DO_A();\
??? ????DO_B();??\
??? ????DO_C()
???
//

??? if?(CONDITION_A)
??? ????DO_SOMETHING();


要是使用do...while(0)DO_SOMETHING()宏改成這樣,就可以避免上述的錯誤了。

#define?DO_SOMETHING()?do{?\
??? ????DO_A();?\
??? ????DO_B();?\
??? ????DO_C();?\
??? }
while(0)
這可就有一個疑問了,何必加上do...while(0)呢,直接使用大括號不就好了么?

不錯,只要在宏中使用大括號就可以把多條語句合成一條語句了。不過,大括號并不是個天山雪蓮般可治百病的靈藥喲。

看看直接使用大括號的程序吧。

#define?DO_SOMETHING()?{\
??? ????DO_A();??\
??? ????DO_B();??\
??? ????DO_C();??\
??? }

???
//

???
if?(CONDITION_A())
??? ????DO_SOMETHING();
???
else
??? ????DO_SOMETHING_ELSE();

看出問題了么?由于if語句下的宏后多的那個小小的分號,if下的一個語句就變成了兩個語句,隨后的else可就會提示你語法錯誤嘍

而使用之前do...while(0)的宏就不會有這個問題,這也就是do...while(0)的第二個用處了。

當然,以上說的這些都是一種無奈的保護機制。如果保持一個良好的編程習慣,比如在if和else后面緊跟大括號,就不需要在乎宏上的do...while(0)了。

只是,可惜的是,當我把do...while(0)使用到公司的代碼中時,卻發現這觸犯了Lint工具的檢測規范,而直接給了我違規的結論。無奈之下,只得把do...while(0)全部刪除。

或許,Lint工具并不是告訴我這樣做違反編程規范,只是想提醒我要養成良好的遵守編程習慣吧

轉載于:https://www.cnblogs.com/Gigabyte/archive/2007/01/18/623263.html

總結

以上是生活随笔為你收集整理的合理或违规的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。