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

[复制链接]
 楼主| ARM白痴 发表于 2007-1-16 16:24 | 显示全部楼层 |阅读模式
在一个搏客中看见宏定义:<br /><br />5,得到一个field在结构体(struct)中的偏移量&nbsp;<br /><br />#define&nbsp;FPOS(&nbsp;type,&nbsp;field&nbsp;)&nbsp;&nbsp;<br /><br />/*lint&nbsp;-e545&nbsp;*/&nbsp;(&nbsp;(dword)&nbsp;&((&nbsp;type&nbsp;*)&nbsp;0)-&gt&nbsp;field&nbsp;)&nbsp;/*lint&nbsp;+e545&nbsp;*/&nbsp;<br /><br />6,得到一个结构体中field所占用的字节数&nbsp;<br /><br />#define&nbsp;FSIZ(&nbsp;type,&nbsp;field&nbsp;)&nbsp;sizeof(&nbsp;((type&nbsp;*)&nbsp;0)-&gtfield&nbsp;)&nbsp;<br /><br /><br />照着弄在我的程序中,用的是KEIL&nbsp;C编译,发现都编译不过,大家帮忙分析下,谢谢了。
computer00 发表于 2007-1-16 16:40 | 显示全部楼层

这样试试:

typedef&nbsp;struct&nbsp;<br />{<br />&nbsp;int&nbsp;a;<br />&nbsp;long&nbsp;int&nbsp;b;<br />}c;<br /><br />#define&nbsp;dword&nbsp;unsigned&nbsp;int<br /><br />#define&nbsp;FPOS(type,field)&nbsp;((dword)&(((type*)0)-&gtfield))<br /><br />#define&nbsp;FSIZ(type,field)&nbsp;sizeof(((type&nbsp;*)0)-&gtfield)<br /><br /><br /><br />//使用<br /><br />FPOS(c,b);<br />FPOS(c,a);<br />FSIZ(c,a);<br />FSIZ(c,b);
 楼主| ARM白痴 发表于 2007-1-16 17:12 | 显示全部楼层

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

((dword)&(((type*)0)-&gtfield))<br />是什么意思,(dword)&&nbsp;&nbsp;有什么用处?
computer00 发表于 2007-1-16 17:58 | 显示全部楼层

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

如果是51,就可以设置为16位的整型,即unsigned&nbsp;short&nbsp;int.
xlander 发表于 2007-1-16 18:43 | 显示全部楼层

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

计算偏移量一般用在什么场合?
 楼主| ARM白痴 发表于 2007-1-16 19:02 | 显示全部楼层

学习用。。。

  
 楼主| ARM白痴 发表于 2007-1-16 19:18 | 显示全部楼层

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

前面的(dword)没有也应该可以吧?
computer00 发表于 2007-1-16 20:36 | 显示全部楼层

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

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

32

主题

119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部