定义了一点,但没有名称?

问题描述 投票:0回答: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;

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

c embedded
2个回答
4
投票

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

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


2
投票
struct-declarator:
declarator
type-specifier declarator (opt) : constant-expression

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

© www.soinside.com 2019 - 2024. All rights reserved.