读书人

公司的一个宏定义没看懂!该怎么解决

发布时间: 2012-08-15 16:57:17 作者: rapoo

公司的一个宏定义,没看懂!

C/C++ code
#define AI_GET_STRUCT_PTR(ptr, type, member) \    ((type *)( (char *)(ptr) - (unsigned int)(&((type *)0)->member) ))


求详细解释!谢谢!

[解决办法]
应该是得到type中的成员member的偏移量或者说位置
[解决办法]
(unsigned int)(&((type *)0)->member) ))
获取的member在Type结构体中的偏移


[解决办法]
ptr是指向list_head类型链表的指针,type为一个结构,而member为结构type中的一个域,类型为list_head,这个宏返回指向type结构的指针
[解决办法]
[size=18px][b]
C/C++ code
#define AI_GET_STRUCT_PTR(ptr, type, member) \    ((type *)( (char *)(ptr) - (unsigned int)(&((type *)0)->member) ))
[解决办法]
第一句后面的‘\’,表示连接下一行,上句和下句是一句话;

宏定义就是用一个简短的句子代替一个长的句子;

当语句中出现前一部分即AI_GET_STRUCT_PTR(ptr, type, member) ,

机器编译时直接以后面的语句((type *)( (char *)(ptr) - (unsigned int)(&((type *)0)->member) ))代替;

AI_GET_STRUCT_PTR(ptr, type, member) 里面的ptr, type, member均为参数,就像函数一样,可以向后面传值;

宏定义也可以认为是一个函数,可以不带参数,也可以带参数;


这样说详细不?后面语句实现的功能上面说了:是得到type中的成员member的偏移量或者说位置。

读书人网 >C语言

热点推荐