日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) 在宏里冗余的意义的全部內容,希望文章能夠幫你解決所遇到的問題。

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