本文共 1212 字,大约阅读时间需要 4 分钟。
#ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#endif#ifndef sizeof_field#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER))#endif#ifndef offsetofend#define offsetofend(TYPE, MEMBER) (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER))#endif#ifndef containof #ifdef offsetof #define containof(ptr, type, member) ((type *) ((char *)(ptr) - offsetof(type, member))) #else #define containof(ptr, type, member) ((type *)((char *)(ptr) - (size_t)&((type *)0)->member)) #endif#endif /** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member: the name of the member within the struct. * */#ifndef container_of#define container_of(ptr, type, member) ({ \ const typeof(((type *)0)->member)*__mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type, member)); })#endif/** * offsetofend(TYPE, MEMBER) * * @TYPE: The type of the structure * @MEMBER: The member within the structure to get the end offset of */#ifndef offsetofend#define offsetofend(TYPE, MEMBER) (offsetof(TYPE, MEMBER) + sizeof(((TYPE *)0)->MEMBER))#endif
转载地址:http://abpaf.baihongyu.com/