假设我的结构定义如下:
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位将被分配给计数器类型结构变量的实例。定义空位字段可能是一个实际意义,例如在上面的结构中 - 如果有的话?
为回应这个问题的两面性 - 以前确实曾提出类似的问题。我遇到空位字段的情况与微控制器编程和配置寄存器有关 - 因此,问题是关于在该特定情况下使用空位字段。不幸的是,类似帖子的答案并没有解决这些问题。希望这会更多地证明这个问题:)
答案 0 :(得分:5)
您可能会看到一个空位字段的原因有很多。它们可能会保留供将来使用,例如扩展现有字段而不必更改其偏移量。他们也可能在那里进行对齐,填充到一些不错的" round"对准。在传入/传出硬件寄存器的结构中,您可以看到空位字段,因为硬件将强制要求结构的精确位布局。无论他们的目的是什么,给田地一个有意义的名字将有助于表明他们的目的。
作为旁注,你的结构看起来有点偏。您使用的是8位数据类型,但您的字段不会与任何特定边界对齐。将3位保留空间更改为2位(以便每对字段都适合uint8_t
)或使用单个数据类型,如uint32_t
,可以将所有字段保存在一个中。< / p>