打印

如何得到一个field在结构体中的偏移量?得到所占用的字节数

[复制链接]
2134|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ARM白痴|  楼主 | 2007-1-16 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个搏客中看见宏定义:

5,得到一个field在结构体(struct)中的偏移量 

#define FPOS( type, field )  

/*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */ 

6,得到一个结构体中field所占用的字节数 

#define FSIZ( type, field ) sizeof( ((type *) 0)->field ) 


照着弄在我的程序中,用的是KEIL C编译,发现都编译不过,大家帮忙分析下,谢谢了。

相关帖子

沙发
computer00| | 2007-1-16 16:40 | 只看该作者

这样试试:

typedef struct 
{
 int a;
 long int b;
}c;

#define dword unsigned int

#define FPOS(type,field) ((dword)&(((type*)0)->field))

#define FSIZ(type,field) sizeof(((type *)0)->field)



//使用

FPOS(c,b);
FPOS(c,a);
FSIZ(c,a);
FSIZ(c,b);

使用特权

评论回复
板凳
ARM白痴|  楼主 | 2007-1-16 17:12 | 只看该作者

谢谢00,编译成功了,再请教一个问题。。

((dword)&(((type*)0)->field))
是什么意思,(dword)&  有什么用处?

使用特权

评论回复
地板
computer00| | 2007-1-16 17:58 | 只看该作者

&是取地址,dword是强制类型转换,转换为你需要的类型

如果是51,就可以设置为16位的整型,即unsigned short int.

使用特权

评论回复
5
xlander| | 2007-1-16 18:43 | 只看该作者

请问楼主为什么要计算偏移量啊

计算偏移量一般用在什么场合?

使用特权

评论回复
6
ARM白痴|  楼主 | 2007-1-16 19:02 | 只看该作者

学习用。。。

使用特权

评论回复
7
ARM白痴|  楼主 | 2007-1-16 19:18 | 只看该作者

((dword)&(((type*)0)->field))

前面的(dword)没有也应该可以吧?

使用特权

评论回复
8
computer00| | 2007-1-16 20:36 | 只看该作者

自己试试就知道了.也许编译器会报类型不符

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

119

帖子

0

粉丝