一个问题,如何自动导出结构体的偏移
有没有方法自动分析出一个结构体每一项的偏移量呢?
例如
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果是gcc,那么你可以使用 __builtin_offsetof 来计算偏移。
如果不是gcc,那么你可以写一个小程序来计算。
struct xx
{
int a;
int b;
}xx;
那么 &xx.a - &xx 就是 a 的偏移。 &xx.b - &xx 就是 b 的偏移。
linux内核代码中还有一个办法:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
其实我是想说,编译器(暂设定为gcc)的debug信息中应该包含这些信息,能否写一个程序提取出这些信息(不是自己用offset算)
可以的。
http://code.google.com/p/reflecxx/