offsetof和sizeof类似的位字段功能

offsetof and sizeof like functionality for bit fields

本文关键字:字段 功能 sizeof offsetof      更新时间:2023-10-16

结构和类有offsetof宏和sizeof运算符。
是否有任何方法可以为位字段获得类似的功能,以便可以查询位字段成员的位差位数

sizeof可以使用#define field_name_size n来模拟,但对于offsetof,我担心使用#define field_name_offset会变得太麻烦,因为那时似乎必须使用一些复杂的公式来考虑比特字段中的所有先前成员。

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

是否有任何方法可以获得位字段的类似功能,以便可以查询位字段成员的位偏移量和位大小?

不,没有办法做到这一点。无法从位字段成员推导出位大小偏移量。

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

不,没有。这也是您应该避免位字段并使用算术和完整的可寻址整数类型来创建自己的位数组等的众多原因之一。