定义一点,但没有名字?

时间:2013-08-09 16:30:44

标签: c compiler-construction embedded

所以我有一些代码用于我的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;

我希望这不是太多问题,我发现这很有趣。

2 个答案:

答案 0 :(得分:4)

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

  

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

答案 1 :(得分:2)

struct-declarator:
declarator
type-specifier declarator (opt) : constant-expression

声明符是可选的,这就是编译器没有barf的原因。