看板 C_and_CPP 關於我們 聯絡資訊
Linux #ifndef WARN_ON #define WARN_ON(condition) ({ \ int __ret_warn_on = !!(condition); \ if (unlikely(__ret_warn_on)) \ __WARN(); \ unlikely(__ret_warn_on); \ }) #endif 請問這裡使用雙重否定有什麼好處? 似乎是迫使 __ret_warn_on 只會等於 0 或 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.122.242.72 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1471868723.A.911.html
ilikekotomi: 上網查論壇也是看到只會等於0和1 學到一招 08/22 20:29
Eleina: likely / unlikely 的 macro 中會再做一次, 這裡有點多餘? 08/22 20:29
nowar100: 就是你說的那樣 不用管condition型態 永遠會得到true/fa 08/22 20:49
nowar100: lse 用 int 去接 bool 應該也是老 code 了 08/22 20:50
意思是如果不這樣做可能要先轉型囉? 例如檢查傳入的 (int *) 是否為 null ※ 編輯: Eleina (27.122.242.72), 08/22/2016 20:55:01
nowar100: 僅僅是想利用C any to bool implicit cast特性而已 08/22 23:39
LPH66: 關於再做一次的問題, 現在的編譯器能把這樣的兩個判斷化簡 08/23 02:18
LPH66: 不過這裡變成 0 或 1 其實我猜跟 likely / unlikely 有關 08/23 02:19
LPH66: 因為 likely / unlikely 實際上是 expect 1/0 08/23 02:20
LPH66: 但是傳進來的 condition 可以是任意整數 08/23 02:20
bluesoul: 應該也是用bool就好 08/23 13:49