c語言核心筆記
阿新 • • 發佈:2018-12-14
一、巨集函式container_of(ptr,type,member) 這個巨集的作用就是利用member成員的地址計算其所在結構體的首地址。
#define container_of(ptr, type, member)
({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
offserof 函式原型:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)這個巨集的含義就是TYPE型別的結構體的首地址到MEMBER成員的首地址的偏移量。
__mptr地址減去offsetof的偏移量就是type結構體的首地址
二、typeof()
typeof(b) a; //相當於獲取變數b的型別,定義一個變數a,即a和b的變數型別一致。
如上面的 const typeof( ((type *)0)->member ) *__mptr = (ptr);這樣可以確保傳入引數ptr的型別是(type *)0)->member,否則編譯會報警告。體現核心的嚴謹。
VFS檔案系統結構分析
http://blog.jobbole.com/105537/