tianjiao08 发表于 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?

jzhang918 发表于 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 的偏移。

bigrat023 发表于 2009-11-10 10:31

linux内核代码中还有一个办法:

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

tianjiao08 发表于 2009-11-10 21:02

其实我是想说,编译器(暂设定为gcc)的debug信息中应该包含这些信息,能否写一个程序提取出这些信息(不是自己用offset算)

lllaaa 发表于 2009-11-10 22:51

可以的。
http://code.google.com/p/reflecxx/
页: [1]
查看完整版本: 一个问题,如何自动导出结构体的偏移