所以我有一些用于我的主板的 iodefine 的代码。我在结构体中看到了很多这样的内容。它到底在做什么?它只是最后 4 位的占位符吗?为什么它不会导致编译器错误,它有什么用?
union {
unsigned char BYTE;
struct {
unsigned char OVRF:1;
unsigned char IDLNF:1;
unsigned char MODF:1;
unsigned char PERF:1;
unsigned char :4; <------------
} BIT;
} SPSR;
我希望这不是太多问题,我只是发现这很有趣。
这是一个未命名的位字段。它用于提供填充(通常在相邻位字段之间)。
(C99, 6.7.2.1p11) “没有声明符的位域声明,只有冒号和宽度,表示未命名的位域”
struct-declarator:
declarator
type-specifier declarator (opt) : constant-expression
声明符是可选的,这就是编译器不会报错的原因。