1. 程式人生 > >c語言核心筆記

c語言核心筆記

一、巨集函式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/