免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2095 | 回复: 4
打印 上一主题 下一主题

一个问题,如何自动导出结构体的偏移 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-09 22:31 |只看该作者 |倒序浏览
有没有方法自动分析出一个结构体每一项的偏移量呢?
例如
struct xx
{
    int a;
    int b;
}xx;
可以自动分析出a : 0, b: 4呢?
更复杂的情况包括:
struct yy
{
   int a;
   int b;
#ifdef DEFC
   int c;
#endif
   int d;
} yy;
能够正确判断d是偏移8还是12?

论坛徽章:
0
2 [报告]
发表于 2009-11-09 23:13 |只看该作者

回复 #1 tianjiao08 的帖子

如果是gcc,那么你可以使用 __builtin_offsetof 来计算偏移。

如果不是gcc,那么你可以写一个小程序来计算。

struct xx
{
    int a;
    int b;
}xx;

那么 &xx.a - &xx 就是 a 的偏移。 &xx.b - &xx 就是 b 的偏移。

论坛徽章:
0
3 [报告]
发表于 2009-11-10 10:31 |只看该作者
linux内核代码中还有一个办法:

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

论坛徽章:
0
4 [报告]
发表于 2009-11-10 21:02 |只看该作者
其实我是想说,编译器(暂设定为gcc)的debug信息中应该包含这些信息,能否写一个程序提取出这些信息(不是自己用offset算)

论坛徽章:
0
5 [报告]
发表于 2009-11-10 22:51 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP