offsetof 和 sizeof 类似位字段的功能

Rol*_*kas 5 c c++ bit-fields

结构和类 有offsetof宏和运算符。有没有办法获得位字段的类似功能,以便可以查询位字段成员的位偏移量位大小?sizeof

可以sizeof使用 来模拟#define field_name_size n,但恐怕offsetof使用起来会变得太麻烦#define field_name_offset,因为那时似乎必须使用一些复杂的公式来考虑位字段中所有前面的成员。

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

πάν*_*ῥεῖ 4

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

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

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