结构中空位字段的用途?

Purpose of empty bit fields in a structure?

假设我有一个定义如下的结构:

typedef struct Counters {
    uint8_t counterSec : 6;
    uint8_t : 3;
    uint8_t counterMin : 6;
    uint8_t : 3;
    uint8_t counterHr : 5;
    uint8_t : 1;
};

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

针对这个问题的口是心非-以前确实有人问过类似的问题。我遇到空位字段的情况与微控制器编程和配置寄存器有关 - 因此,问题是关于在该特定情况下使用空位字段。不幸的是,类似 post 的答案并未解决这些问题。希望这能进一步证明这个问题的合理性 :)

您可能会看到空位字段的原因有很多。它们可能会保留供将来使用,例如在不必更改偏移量的情况下扩展现有字段。它们也可能用于对齐目的,填充一些漂亮的 "round" 对齐。在通过 to/from 硬件寄存器的结构中,您可以看到空位字段,因为硬件将强制执行结构的确切位布局。无论它们的用途是什么,为字段指定一个有意义的名称将有助于表明它们的用途。

附带说明一下,您的结构看起来有点不对劲。您使用的是 8 位数据类型,但您的字段未与任何特定边界对齐。将您的 3 位保留 space 更改为 2 位(以便每对字段适合 uint8_t)或使用单一数据类型,如 uint32_t 可以容纳您的所有字段在一个。