IOFFSETOF ICONTAINEROF IQUEUE_ENTRY

#include <iostream>
#define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

#define ICONTAINEROF(ptr, type, member) ((type*)(((char*)((type*)ptr)) - IOFFSETOF(type, member)) )

#define IQUEUE_ENTRY(ptr, type, member) ICONTAINEROF(ptr, type, member)

using namespace std; int main(){ struct Demo{ char sex; int id; }; struct Demo dd = {'0',666}; cout << "&dd : " << &dd << endl; cout << "IQUEUE_ENTRY(&dd,Demo,sex) : " << IQUEUE_ENTRY(&dd.sex,Demo,sex) << endl; cout << "IQUEUE_ENTRY(&dd,Demo,id) : " << IQUEUE_ENTRY(&dd.id ,Demo, id) << endl; return 0; }

输出:

    IQUEUE_ENTRY作用:根据结构体的某个数据成员,输出结构体的起始地址。

 

#define IOFFSETOF(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)

 

IOFFSETOF:解析参考https://www.cnblogs.com/iuyy/p/13391851.html
原文地址:https://www.cnblogs.com/iuyy/p/13392288.html