巨集定義中的do while 0

2021-10-04 00:25:59 字數 940 閱讀 9747

我們都知道do while迴圈,但是在巨集定義中常常會出現dowhile(0);的用法,這樣的迴圈不是只執行一次嗎?不用do while也可以實現相同的功能呀,那麼為什麼要使用dowhile(0);呢?

我們先來分析幾個例子:

#define fun(x) func1(x);func2(x)

if (true)

fun(x);

上述**會展開成:

if (true)

func1(x);

func2(x);

這和我們巨集定義的意圖不一樣,因為我們想要在if語句裡面執行func1和func2,而現在執行了func1。

你可能會問,這樣在巨集裡面加上大括號{}不就行了嗎?我們再來看看下面的例子:

#define fun(x) 

if (true)

fun(x);

else

retrun 0;

上述**會展開成:

if (true);

else

return 0;

我們可以看到if…else…語句出現了語法錯誤。

將巨集定義改為dowhile(0);的形式:

#define fun(x) dowhile(0);

if (true)

fun(x);

else

return 0;

上述**會展開成:

if (true)

dowhile(0);

else

return 0;

上述展開的**無論從語法上還是邏輯上都沒有錯誤了。總的來說,在巨集定義中使用dowhile(0);是為了在巨集定義中使用多個語句塊而不會受大括號和分號的影響。

巨集定義中的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 0 在 linux 核心中,經常會看到 do while 0 這樣的語句,許多人開始都會疑惑,認為 do while 0 毫無意義,因為它只會執行一次,加不加 do while 0 效果是完全一 樣的,其實 do while 0 主要用於巨集定義中。這裡用乙個簡單點的巨集來演示 d...

巨集定義中的do while 0 語句

do while 0 在 linux 核心中,經常會看到 do while 0 這樣的語句,許多人開始都會疑惑,認為 do while 0 毫無意義,因為它只會執行一次,加不加 do while 0 效果是完全一 樣的,其實 do while 0 主要用於巨集定義中。這裡用乙個簡單點的巨集來演示 h...