#include <stdio.h>
struct list{//通用链表
struct list *next;
struct list *prev;
};
typedef struct page{//通用链表 应用
int i;
int j;
struct list aa;
}MM;
//宏函数定义(这里只能定义宏函数,想下面的printf第二就出错!因为有语法检查。)
//此函数定义完成 由aa取page的首地址
#define list_entry(ptr, type, member) /
((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
#define list_pianyi(type, member) /
((unsigned long)(&((type *)0)->member))
void main()
{
MM pp;
struct list qq;
qq.next = &qq;
qq.prev = &qq;
pp.i = 1;
pp.j = 2;
pp.aa = qq;
printf("%x/n", (list_entry(&pp.aa, MM, aa))->j);
printf("%x/n", list_pianyi(MM, aa));
// printf("%x/n", ((MM *)((char *)(qq) - (unsigned long)(&((MM *)0)->aa))));//错误!
printf("%x/n",&pp);
printf("%x/n",&pp.aa);
return;
}