结构中空位字段的用途?

fan*_*dor 2 c bit-fields

假设我的结构定义如下:

typedef struct Counters {
    uint8_t counterSec : 6;
    uint8_t : 3;
    uint8_t counterMin : 6;
    uint8_t : 3;
    uint8_t counterHr : 5;
    uint8_t : 1;
};
Run Code Online (Sandbox Code Playgroud)

由于我希望每个前两个计数器专用6位,每个最后一个计数器为5位,因此我最终得到17位,这意味着总共24位将被分配给计数器类型结构变量的实例.定义空位字段可能是一个实际意义,例如在上面的结构中 - 如果有的话?

针对这个问题的两面性 - 以前确实提出了类似的问题.我遇到空位字段的情况与微控制器编程和配置寄存器有关 - 因此,问题是在该特定情况下使用空位字段.不幸的是,类似帖子的答案并没有解决这些问题.希望这将证明这个问题多一点:)

bta*_*bta 5

您可能会看到一个空位字段的原因有很多.它们可能会保留供将来使用,例如扩展现有字段而不必更改其偏移量.它们也可能用于对齐目的,填充到一些不错的"圆形"对齐.在传入/传出硬件寄存器的结构中,您可以看到空位字段,因为硬件将强制要求结构的精确位布局.无论他们的目的是什么,给田地一个有意义的名字将有助于表明他们的目的.

作为旁注,你的结构看起来有点偏.您使用的是8位数据类型,但您的字段未对齐任何特定边界.要么将3位保留空间更改为2位(以便每对字段都适合a uint8_t),要么使用单个数据类型uint32_t,将所有字段保存在一个中.