共用体の宣言の形式を以下に示します。
union データ型名 switch (データ型) { case 定数式 ; 要素 [, ..] : default; 要素 [, ..] : };
要素の形式を以下に示します。typedefは、使用しません。
基本データ型 要素名; シーケンス型 要素名; 構造体 要素名; 共用体 要素名; 固定小数点型 要素名; スコープ名 要素名;
IDLの共用体は、C言語の共用体とswitch文とを合わせたものです。IDLの共用体の要素をcase文に関連付けて定義する必要があります。
共用体のswitch文の型定義には、どの要素が使用されるかを決定する型を指定する必要があります。
case文の定数式は、switch文の型定義と一貫性を持つ必要があります。定数式は、0~65535の間の値を指定します。
case文のdefaultは、1回だけ使用することが許可されています。
要素内のスコープ名は、定義済みの整数、文字、ブーリアン、列挙型のいずれかである必要があります。
case文の定数式は、switch文の型定義で指定された型と一致する必要があります。
一致の規則を以下に示します。
longの範囲内のすべての整数値
shortの範囲内のすべての整数値
unsigned longの範囲内のすべての整数値
unsigned shortの範囲内のすべての整数値
long longの範囲内のすべての整数値
char
真(TRUE)または偽(FALSE)
enumのすべてのメンバ
1つの共用体内で、要素名は一意である必要があります。
switchで指定した型が列挙型である場合、その識別子は共用体のスコープの中に入れ、要素名と異なっている必要があります。
共用体の型指定がとりうるすべての値をcase文で指定する必要はありません。
共用体の値は、型定義の値と以下のいずれかからなります。
データ型がcase文に明示されている場合、要素の値はcase文の記述に対応します。
defaultが指定されている場合、要素の値はdefaultの記述に対応します。
それ以外の値は、ありません。
例
共用体の記述例を以下に示します。
union U switch (long) { case 1: long a; case 2: short b; default: char c; };