两个宏是否一样功能?

jingzu 2009-07-31 03:38:14
大家分析一下,这两个宏写法不一样,是否一样功能?

#define container_of(ptr,TYPE,member) \
((TYPE *)((char*)(ptr) - offsetof(TYPE,member)))


#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
...全文
86 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingzu 2009-08-07
  • 打赏
  • 举报
回复
答案不满意,我自己项一下
lghndyz 2009-08-01
  • 打赏
  • 举报
回复
帮顶一下!!
fairchild811 2009-07-31
  • 打赏
  • 举报
回复
typeof 是GCC特有的扩展,用来返回后面操作数的类型

这个 关键字在CB和VC里面都是没有的。

基本可以写成这样:(不知(type *)( (char *)ptr 前面加上const是否可以?)
#define container_of(ptr, type, member) ((type *)( (char *)ptr - offsetof(type,member) ))

但是好像也有说法写成这样是不严谨的

const typeof( ((type *)0)->member ) *__mptr = (ptr); 这种类型的语句可以避免宏调用时参数重复计算,最常见的就是a++;

此处应该不存在这种情况,但是可能的作用是:

用来做类型检查,如果传入其它类型的指针,提出警告

可以参考

http://bbs2.chinaunix.net/archiver/tid-852201.html

http://blog.csdn.net/yinkaizhong/archive/2008/11/19/3335630.aspx
jingzu 2009-07-31
  • 打赏
  • 举报
回复
确定一样啊?能举个例子吗?
Waiting4you 2009-07-31
  • 打赏
  • 举报
回复
晕~~和我刚才回的一样,我觉得是一样的,呵呵:)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧