tech-sjh

2012年2月10日 星期五

BUILD_BUG_ON_XXXX macros in kernel.h

剛在 stackoverflow 看到有人在問 ":-!!" 在 C 語言的作用,點進去才知道是 linux kernel
header file ./include/linux/kernel.h 的兩個 Macro 定義:

683 /* Force a compilation error if condition is true, but also produce a
684    result (of value 0 and type size_t), so the expression can be used
685    e.g. in a structure initializer (or where-ever else comma expressions
686    aren't permitted). */
687 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
688 #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))
689
然後也有人解釋了:-!!,就是 : 取位元數, - 負的,!! 測試 e 是否為 0 ,回傳 0 或 1

就語意上是在測試另一個在 ./include/asm-generic/bug.h BUG_ON() macro 是否回傳
 0 或 null,如果是 0 或 null 就正確 (size 0),否就會 build fail (size (-1))

沒有留言:

張貼留言

版權宣告、免責聲明


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-非商業性-相同方式分享 4.0 國際 授權條款授權.
免責聲明: 本文所載資料僅供參考,並不構成投資建議,
讀者閱讀或使用該資料所導致結果需要自擔風險與責任,
作者概不承擔閱讀人行為之任何風險與責任。
除非有特別宣稱,作者言論並不代表所屬任何團體、公司、或其他人意見。