C联合只包含一个结构

Cac*_*ito 8 c struct unions

我今天开始在PIC16f88上编程,发现其寄存器的标题包含一个union只包含一个struct:

extern volatile unsigned char ANSEL __at(0x09B);
typedef union {
    struct {
        unsigned ANS0       :1;
        unsigned ANS1       :1;
        unsigned ANS2       :1;
        unsigned ANS3       :1;
        unsigned ANS4       :1;
        unsigned ANS5       :1;
        unsigned ANS6       :1;
    };
} ANSELbits_t;
extern volatile ANSELbits_t ANSELbits __at(0x09B);
Run Code Online (Sandbox Code Playgroud)

它是否提供任何好处,以封闭structunion包含struct

它的访问量我想是完全相同的,因为它是一个简单的struct(因为它struct是匿名的):

ANSELbits.ANS4 = 0;

P__*_*J__ 2

如果您换行并且我认为有人忘记添加另一个成员(或者没有复制粘贴所有内容),则没有任何区别,如下面的声明所示。不会抑制任何警告。

typedef union {
    struct {
        unsigned ANS0       :1;
        unsigned ANS1       :1;
        unsigned ANS2       :1;
        unsigned ANS3       :1;
        unsigned ANS4       :1;
        unsigned ANS5       :1;
        unsigned ANS6       :1;
    };
    uint8_t d8;
} ANSELbits_t;
extern volatile ANSELbits_t ANSELbits __at(0x09B);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果结构必须适合 1 个字节(8 位),则此声明是错误的,应使用 uint_t 类型。