#include <stdio.h> #define offsetof(type,member) ((size_t)&((type *)0)->member) #define container_of(ptr,type,member) ({ / const typeof(((type *)0)->member)*__mptr = (ptr);/ (type *)((char *)__mptr - offsetof(type,member));}) struct node{ int id; int var; char info[10]; } node1 = {1,100,"first"}; int main() { struct node *ptr; int offset; /*container_of宏的细化 const typeof(((struct node*)0)->var)*_mptr = &node1.var; offset = (int)(&((struct node *)0)->var); ptr = (struct node *)((char *)_mptr - offset); printf("offsetof node1.var = %d/n",offset); */ ptr = container_of(&node1.var,struct node,var); printf("%d/t%d/t%s/n",ptr->id,ptr->var,ptr->info); return 0; }