2016-07-02 6 views
0

私はプログラム検証ソフトウェアを実行していて、どのメンバーがアクティブであるかについて何か言いたいと思います。だから私はタグ付きユニオンとしてそれを書こうとしました:(タグ付き)ユニオンのアクティブメンバー

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

あなたが求めていることは明確ではありません。フィールド 'my_taggedunion.active_member'はありません。 'my_taggedunion.tag == v1'のときに正確に何をしたいですか? – kaylum

+0

あなたのプログラム検証ソフトウェアに依存しませんか? – melpomene

+0

正確には、アクティブなメンバーが何であるかを指定する方法を尋ねています –

答えて

3

をという概念がありません 『アクティブメンバーは』限りCが懸念している。なおANSI C標準に従って:

組合へのポインタをメンバへのポインタの型にキャストされた場合、 結果はそのメンバーを指す

。あなたはあなたのケースであなたがmy_tagを通じて行っている組合自分の関連部分を追跡する必要が

(X3.159-1989とカーニハン&リッチーのA8.3の3.5.2.1を参照)。

+2

標準に付録A8はありません。正しい参照を入力してください。 – Olaf

関連する問題