(标记)联合中的活动成员

时间:2016-07-02 12:16:40

标签: c unions

我有一个工会我正在运行一个程序验证软件,并且想说一下哪个成员是活跃的。所以我试着把它写成标记的联合:

struct my_struct {
    enum my_tag {v1, v2};
    struct{
        enum my_tag tag;
        union {
            type1 v1;
            type2 v2;
        }value;
    }my_taggedunion; 
};

我正在运行程序验证软件。我想添加一个要求,如果my_taggedunion.tag == v1那么联合中的活动成员应该是v1

我试图写一些类似"如果my_taggedunion.tag == v1然后my_taggedunion.active_member == v1。结论的正确语法是什么?

1 个答案:

答案 0 :(得分:3)

没有"活跃成员的概念"就C而言。请注意,根据ANSI C标准:

  

如果指向union的指针被强制转换为指向成员的指针类型,   结果是指该成员。

(参见X3.159-1989的3.5.2.1和Kernighan& Ritchie的A8.3)

您必须自己跟踪工会的相关部分,在您的情况下,您需要通过my_tag进行跟踪。