C - 为什么将结构放在 union 中?

标签 c struct unions

例如,此代码来自 USB 设备的固件:

typedef union HID_CONTROLS_TYPEDEF
{
    struct
    {
         BYTE B1:1;     //buttons
         BYTE B2:1;
         BYTE B3:1;
         BYTE B4:1;
         BYTE B5:1;
         BYTE B6:1;
         BYTE Bpad:2;  //filler
    } buttons;
} HID_CONTROLS;

为什么struct在union里面,这会有什么影响?它不能作为结构体工作吗?

最佳答案

在这种情况下,你是对的,它是多余的。

然而,在过去的某个时候,union 可能还携带了一个 8 位的 char,以便于映射。

或者他们认为将来可能。

那是我的猜测,我强调,这只是一个猜测。然而,这只是其背后的原因,而且是一个受过良好教育的人的猜测。

struct 的多余性 (?) 是给定的,而不是猜测。

关于C - 为什么将结构放在 union 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785363/

相关文章:

c - 有没有办法通过 union 访问各个位?

c++ - C++ 中的 union 实际上是一个类吗?

c - 如何正确地将数组作为函数参数传递?

c - 在主函数启动之前出现段错误 11(可能在结构中)

在 C 中使用 if/else 语句的命令行参数

c - 分配 (const char *) 指针类型 - 段错误

c - 增加矩阵的大小

linux - 使用 fts(3) 函数重命名文件和目录。仅第一级发生变化

c++ - 使用洋葱而不是结构更好的场景

c++ - 类型转换 union