【问题标题】:Union - How do you know which union parameter is in use?Union - 您如何知道正在使用哪个 union 参数?
【发布时间】:2013-12-01 11:24:06
【问题描述】:

我有以下代码:

struct sched_param {
    union {
        int sched_priority;
        struct rcost_sched_param rcost_params;
    };
};

我想知道这两个参数中的哪一个是“活动的”。除了在struct sched_param 中添加一个 int 之外,我还有其他方法吗?

【问题讨论】:

    标签: c unions


    【解决方案1】:
    struct sched_param {
      int type;
      union {
           int sched_priority;
            struct rcost_sched_param rcost_params;
      };
    }
    

    您可以添加名为type的成员,保存参数为“活动”的数据

    【讨论】:

      【解决方案2】:

      不,这是棘手的部分:您必须存储要使用的联合条目的信息(例如,使用单个 char 成员)。另请注意,两个联合条目可能不一定指向相同的位置(如您所料,例如由于打包或字节序),因此您不能只读取一个值并确定它是否包含有效值,因为它是由编译器如何在幕后实现联合中的结构。

      【讨论】:

      • 这完全是误导。不,union 的实现方式与编译器无关:它们用不同的类型覆盖同一个对象。所有union 成员当然总是有相同的地址。这就是 unions 的用途。
      • 稍微改写了那部分。
      • 也好不到哪里去。如何实现unions 真的不取决于编译器。有一个严格的规则:联合类型描述了一组重叠的非空成员对象,每个成员对象都有一个可选的指定名称和可能不同的类型。
      • 我特意说的是里面的struct。我的错,没有注意到最后一句中的措辞。
      猜你喜欢
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2017-07-13
      相关资源
      最近更新 更多