C Union-如何知道正在使用哪个Union参数?

C Union-如何知道正在使用哪个Union参数?,c,unions,C,Unions,我有以下代码: struct sched_param { union { int sched_priority; struct rcost_sched_param rcost_params; }; }; 我想知道这两个参数中哪一个是“活动的”。除了在结构sched_param中添加一个int之外,还有其他方法可以做到这一点吗?没有,这是这里比较棘手的部分:您必须存储要使用的联合条目的信息(例如,使用单个char成员)。还要注意的是,两个联合条目可

我有以下代码:

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

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

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

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

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

,这完全是误导。不,
联合
的实现方式与编译器无关:它们用不同的类型覆盖相同的对象。所有的
工会成员肯定都有相同的地址。这就是union的用武之地。把那个部分改写了一点。没什么大不了的。如何实现
union
s实际上并不取决于编译器。这里有一条严格的规则:联合类型描述一组重叠的非空成员对象,每个对象都有一个可选的指定名称和可能不同的类型。我的坏朋友,没有注意到最后一句的措辞。