ANSI-C中的Linux内核容器_of宏和通用容器

Rob*_*nes 3 c typeof c89 linux-kernel data-structures

是否可以在ANSI-C中实现container_of宏?我不确定如何在ANSI-C中执行它,因为内核实现依赖于GCC Hacks,例如typeof运算符.

我问,因为我想在ANSI-C中实现类似于内核链接列表的通用容器.我想到的实际容器是一个类似于Boost MultiIndex的序列集.

caf*_*caf 10

采用typeof的内核定义container_of()仅仅是编译时类型检查-这将确保在传递ptr确实是一个指针的类型相同member.它可以修改为完全ANSI C,代价是此类型检查:

#define container_of(ptr, type, member) ((type *)((char *)ptr - offsetof(type, member)))
Run Code Online (Sandbox Code Playgroud)

(offsetof()<stddef.h>)