以下に共用体の宣言の形式を示します。
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
真(TURE)または偽(FALSE)
enumのすべてのメンバ
1つの共用体内で要素名は一意でなければなりません。switchで指定した型が列挙型であれば、その識別子は共用体のスコープの中に入ります。そして、その識別子は要素名と違っていなければなりません。共用体の型指定がとりうるすべての値をcase文で指定する必要はありません。共用体の値は型定義の値と、下記のいずれかからなります。
データ型がcase文に明示されていれば、要素の値はcase文の記述に対応します。
defaultが指定されていれば、要素の値はdefaultの記述に対応します。
それ以外の値はありません。
以下に共用体の記述例を示します。
union U switch (long) { case 1: long a; case 2: short b; default: char c; };