C do while 0 的用法和意義

2021-06-22 19:49:26 字數 708 閱讀 3212

/*

do while 0 的用法和意義

*///最近在很多**裡都看到do while 0的身影。乍一看,這不是沒有做任何事情嗎?為什麼還要這樣寫。難道這是多此一舉的嗎?當然不是。

輔助定義複雜的巨集,避免引用的時候出錯:

//假設要定義乙個這樣的巨集

#define dosomething() \

func1();\

func2();

//呼叫

int a = 3;

if(a > 3)

dosomething()

//展開其實是這樣的

if (a > 3)

func1();

func2();// 不管怎樣fun2都要執行了

//如果包裹起來,展開的時候就應該是這樣

if(a > 3)

//兩個函式都能被執行到

dowhile (0);

避免使用goto對程式流進行統一的控制:

doif(i = func2())

}while(0);

避免空巨集引起的warning

//核心中由於不同架構的限制,很多時候會用到空巨集,在編譯的時候,空巨集會給出warning,為了避免這樣的warning,就可以使用do{}while(0)來定義空巨集:

#define emptymicro do{}while(0)

do while 0 的意義和用法

首先明確的是do while迴圈中,無論判斷條件是否滿足,do while 迴圈體內的 至少會執行一次。下文 linux核心和其他一些開源的 中,經常會遇到這樣的 dowhile 0 這樣的 一看就不是乙個迴圈,do.while表面上在這裡一點意義都沒有,那麼為什麼要這麼用呢?實際上,dowhile...

do while 0 的意義和用法

linux核心和其他一些開源的 中,經常會遇到這樣的 do while 0 這樣的 一看就不是乙個迴圈,do.while表面上在這裡一點意義都沒有,那麼為什麼要這麼用呢?實際上,dowhile 0 的作用遠大於美化你的 查了些資料,總結起來這樣寫主要有以下幾點好處 1 輔助定義複雜的巨集,避免引用的...

do while 0 的意義和用法

linux核心和其他一些開源的 中,經常會遇到這樣的 do while 0 這樣的 一看就不是乙個迴圈,do.while表面上在這裡一點意義都沒有,那麼為什麼要這麼用呢?實際上,dowhile 0 的作用遠大於美化你的 查了些資料,總結起來這樣寫主要有以下幾點好處 1 輔助定義複雜的巨集,避免引用的...