通用双向链表,指的是通过一个通用的数据结构,然后添加特定数据形成有具体用途的链表。这主要涉及到代码复用,在C++中实现非常方便,只需要定义一个双向链表的类,每一个具体业务只需要继承它,然后添加自己的数据成员即可。但有时候我们需要用C语言而不是C++,那么该如何实现这种层次关系呢?
首先我们来看两个宏。
第一个是offsetof(可参考Linux内核代码include/linux/Stddef.h):
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
这个宏什么意思呢,它返回MEMBER成员在结构体TYPE中的偏移量,下面举个例子说明,假设有个结构体A如下:
struct struct_A
{
int a[2];
int