那位大虾能解释一下这段宏定义的意思?
国洋建 2004-02-05 10:14:23 #define LIST_ENTRY(ptr, type, member) \
((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
调用:
IcqList alive;
UdpSession *p;
IcqListItem *pos;
IcqListItem *head = &alive.head;
for (pos = (head)->next; pos != (head); pos = pos->next)
{
p = LIST_ENTRY(pos, UdpSession, listItem);
//.....
}
UppSession是一个class, listItem是UppSession的一个IcqListItem类型的成员变量
,IcqListItem是一个双向链表IcqList中项的类型,初始时IcqList中只有一个head项,那位大虾能解释一下这个宏如何展开转换成p的?