do
while(0
);
dowhile(0)的用途並不僅僅是優化你的**。經過一系列的調研和探索,我們總結出它的一些用途如下。
舉例如下:
#define __set_task_state(tsk, state_value) \
do while (0)
使用dowhile(0)構造後的巨集定義不會受到大括號、分號等的影響,總是會按你期望的方式呼叫執行。
這裡你可能感到迷惑不解了,為什麼不用大括號直接把巨集包圍起來呢?為什麼非得使用do/while(0)邏輯呢?
例如,我們用大括號來定義巨集如下:
#define foo(x)
這對於上面舉的if語句的確能被正確擴充套件,但是如果我們有下面的語句呼叫呢:
if
(!feral)
foo(wolf)
;else
bin(wolf)
;
巨集擴充套件後將變成:
if
(!feral)
;else
bin(wolf)
;
大家可以看出,這就有語法錯誤了。
不多說直接上**
char
* data =
nullptr
;data =
(char*)
malloc
(2048);
dowhile(0
);if(data)
free
(data)
;data =
nullptr
;
//刷卡器
dowhile(0
);//接觸式讀卡器
dowhile(0
);//二代證
dowhile(0
);
如果發現dowhile(0)其他好的用處請與我分享! 巨集語句 do while 0
有時程式中重複出現某幾條語句,為了保證程式dry don t repeat yourself 需要將這幾條語句合併為一條語句.在c 中可以選擇用 inline,c語言沒有這個特性,但是可以用巨集實現.正確答案是用dowhile 0 實現,下面推理下為什麼這種方法最好吧.思路一 直接寫在一起 比如要將...
do while 0 用法分析
在許多c c 巨集定義中我們會看到巨集 包含在do while迴圈或者if else語句裡,例如 define m x do while 0 define m x if 1 else 那麼這種用法有什麼好處呢?這種用法最大的好處是增強巨集定義 的魯棒性,儘管使得程式稍稍變得更加複雜。為了加快專案開發...
使用do while 0 的好處
看到乙個比較好的帖子,給大家分享下!cpp view plain copy define lfw x,y do while 0 cpp view plain copy api while 0 1.替代 實現區域性作用域.在一些c的實現裡也可以用.2.避免使用goto,用break做跳出.當你執行一段...