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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

do { ....} while(0) 在宏里冗余的意义

發布時間:2023/12/9 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 do { ....} while(0) 在宏里冗余的意义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
do { ....} while(0) 在宏里冗余的意義

cocos2d-x提供了許多宏模板,如:CC_SAFE_RETAIN(p),CC_SAFE_DELETE(p) 等等

查看一下CC_SAFE_RETAIN的源碼:

#define CC_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0)

為什么要使用 do{}while(0)語句,它不是只執行一次嗎?,為何看的這么令人費解呢?,它與直接使用if(){}語句有什么不同?

假設這里去掉do...while(0),

#define SAFE_DELETE(p) delete p; p = NULL;

那么以下代碼:

if(NULL != p) SAFE_DELETE(p)

存在問題:無論if判斷是否通過,p=NULL;這句都能執行。

你可能發現,為了避免這兩個問題,我不一定要用這個令人費解的do...while,? 我直接用{}括起來就可以了?

#define SAFE_DELETE(p) { delete p; p = NULL;}

的確,這樣的話上面的問題是不存在了,但是我想對于C++程序員來講,在每個語句后面加分號是一種約定俗成的習慣,這樣的話,以下代碼:?

if(NULL != p) SAFE_DELETE(p); else ...

因為if(exp){};else... 這連編譯都通不過。

所以采用do...while(0)是做好的選擇了,對于一個library的作者,他所要做的就是讓其庫具有通用性,我們不能指望所有人都習慣性的都寫成if(){}else{}這中方式。

?

?

?

?

?

posted on 2014-07-06 22:43 慵懶的貓 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/zouly/p/3828759.html

總結

以上是生活随笔為你收集整理的do { ....} while(0) 在宏里冗余的意义的全部內容,希望文章能夠幫你解決所遇到的問題。

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