看到開放源**,巨集定義經常這樣用
為什麼這樣用?#define some()
do while (0)
能夠試一下。假如乙個普通巨集定義
#define some(x) fun1(x);fun2(x)
if(condition)
some(x);
變為
if(condition)
fun1(x);
fun2(x);
這樣直接加個花括號不久行了,為什麼還用do......while()?假如加上花括號
#define some(x)
if(condition)
some(x);
else
someelse(x);
變為
if(condition)
;//多了個分號
else
someelse(x);
因此巨集定義中使用do...while(0)能夠確保無論在**中怎麼使用巨集定義。它總是正確的。
do while 0 在巨集定義中的作用
如果你是一名c程式設計師,你肯定熟悉巨集,它們非常的強大,如果正確使用可以讓你的工作事半功倍。然後,如果你在定義巨集時,很隨意沒有認真檢查,那麼它們可能使得你發狂,浪費n多時間。在很多c程式中,你可能看到許多看起來不是那麼直接的較為特殊的巨集定義。下面就是乙個例子 1 define set taks...
巨集定義中的do while 0
如果你是c 程式設計師,我有理由相信你用過,或者接觸過,至少聽說過mfc,在mfc的afx.h檔案裡面,你會發現很多巨集定義都是用了do.while 0 或do.while false 比如說 define afxassume cond do while 0 粗看我們就會覺得很奇怪,既然迴圈裡面只執...
巨集定義中的do while 0
我們都知道do while迴圈,但是在巨集定義中常常會出現dowhile 0 的用法,這樣的迴圈不是只執行一次嗎?不用do while也可以實現相同的功能呀,那麼為什麼要使用dowhile 0 呢?我們先來分析幾個例子 define fun x func1 x func2 x if true fun...