#include
#include
#include
typedef struct
{
int num;
char a;
}node;
void main()
{
node* p = (node*)malloc(sizeof(node));
p->num = 1;
p->a = 'a';
printf("offsetof:%lu\n",offsetof(node,num));
printf("addr:%lu\n",p);
printf("containerof:%lu\n",container_of(&(p->a), node, a));
}
编译时expected expression before ‘node’ printf("containerof:%lu\n",container_of(&(p->a), node, a));
# container_of 是定义在Linux内核includelinux/kernel.h里面的 _
要使用得加上下面这一段
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})