在看ldlm的代碼過程中遇到了一個很奇怪的問題,有很多宏定義使用了do while(0)這種看起來好像沒啥用的代碼。然后我就問問師兄,才得知,這種用法很常見,自己又查了一下資料,原來在linux內核代碼中經常用到這個東西!現在就將這個東西整理一下。 為什么在內核中碰到 ...
do while 在linux中,經常會看到do while 這樣的語句,許多人開始都會疑惑,認為do while 毫無意義,因為它只會執行一次,加不加do while 效果是一樣的,其實do while 的用法主要在於宏定義中。 這里用一個簡單的宏來演示: define SAFE FREE p do free p p NULL while 假設這里去掉do ... while ,即定義SAFE ...
2019-02-24 19:22 0 602 推薦指數:
在看ldlm的代碼過程中遇到了一個很奇怪的問題,有很多宏定義使用了do while(0)這種看起來好像沒啥用的代碼。然后我就問問師兄,才得知,這種用法很常見,自己又查了一下資料,原來在linux內核代碼中經常用到這個東西!現在就將這個東西整理一下。 為什么在內核中碰到 ...
do-while循環與while循環的不同在於:它先執行循環中的語句,然后再判斷表達式是否為真, 如果為真則繼續循環;如果為假, 則終止循環。因此, do-while循環至少要執行一次循環語句。 簡單來講就是說while循環是先循環后判斷 。 ...
; /dev/null 3.while true; ./test; done ...
int a; scanf_s("%d",&a); while(a>0) { //do something; } while循環先要判斷條件是否成立,如果不成立,那么就直接越過循環,所以while循環執行的次數最少是0次。 do while 循環執行的次數 ...
python中沒有do—while語法,但是python編程中遇到需要使用do—while來實現編程要怎么寫呢? 下面是我從其它博主那里看到的方法,做個筆記,以防遺忘。 要實現的例子: 代碼如下: 1、 a = 0 a = input() while ...
閱讀Mitsuba的代碼的時候,發現了一個有意思的地方: 定義了一個Log的宏函數,使用了do{...} while(0)的語法,這里的while中的條件是常量0,上面的代碼永遠只執行一遍。 感覺是多此一舉,做法令人費解。上stack overflow查了下資料。說法 ...
這樣的代碼一看就不是一個循環,do..while表面上在這里一點意義都沒有,那么為什么要這么用呢? 實際上,do{...}while(0)的作用遠大於美化你的代碼。查了些資料,總結起來這樣寫主要有以下幾點好處: 1、輔助定義復雜的宏,避免引用的時候出錯: 舉例來說,假設你需要 ...
今天讀代碼時候,看到這樣的代碼。。 #define MG_SET_PTRPTR(_ptr, _v) \ do { \ if (_ptr) *(_ptr) = _v; \ } while (0) 1、對於帶有if 語句的宏,無論是內核還是開源代碼,都是用到了do while ...