对于Linux中的C,采用gcc编译器进行编译,其内核源代码的编译也依赖相应的gcc版本。
由于内核中需要大量的使用双链表,因此将双链表数据结构抽象出来,成为list_head
结构体。对于这样的问题,内核源代码采用的方法如下:
利用宏
1
2
3
container_of(ptr,type,member) ({
const typeof( ((type *)0)->member) * __mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member));})
其中ptr表示list成员指针,type表示宿主结构体类型,member表示宿主中list成员变量名。