2

所以我有一些我的板的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;

我希望这不是太多问题,我只是觉得这很有趣。

4

2 回答 2

4

这是一个未命名的位域。它用于提供填充(通常在相邻位域之间)。

(C99,6.7.2.1p11)“没有声明符但只有冒号和宽度的位域声明表示未命名的位域”

于 2013-08-09T16:34:27.390 回答
2
struct-declarator:
declarator
type-specifier declarator (opt) : constant-expression

声明符是可选的,这就是编译器不会出错的原因。

于 2013-08-09T16:35:19.813 回答