位字段的offsetof和sizeof功能

时间:2016-07-22 03:02:39

标签: c++ c bit-fields

结构和类有offsetof个宏和sizeof运算符。
是否有任何方法可以获得位字段的类似功能,以便位字段成员的位偏移位大小可以是查询?

sizeof可以使用#define field_name_size n进行模拟,但对于offsetof我恐怕使用#define field_name_offset会变得过于繁琐,因为那时似乎必须使用match_parent考虑位域中所有前面成员的一些复杂公式。

在某些情况下,它将使人们能够克服手动保持代码与位字段定义同步的需要,这很容易出错。
一个例子是对位字段成员的互锁写入,其中需要使用自定义函数来写入这些成员,因为编译器不提供这样的。
另外,我知道编译器可能会有点不同地实现位字段布局。这些宏/运算符的可用性也会减少该问题的影响。

2 个答案:

答案 0 :(得分:3)

  

有没有办法获得位字段的类似功能,以便可以查询位字段成员的位偏移和位大小?

不,没有办法实现这一目标。位大小偏移不能从位域成员推导出来。

同样sizeof()将始终返回基础类型的大小,最小值为char,因此1是您要检索的最小大小。

答案 1 :(得分:0)

不,没有。这是使用算术和完整的可寻址整数类型来避免位域并使用自己的位数组和类似数据的众多原因之一。