ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

A.7.5 共用体

  以下に共用体の宣言の形式を示します。

  union  データ型名  switch (データ型) {
      case 定数式 ;
          要素 [, ..]
           :
      default;
          要素 [, ..]
           :
  };

  要素の形式を以下に示します(typedefは使用しません)。

  基本データ型  要素名;
  シーケンス型  要素名;
  構造体        要素名;
  共用体        要素名;
  固定小数点型  要素名;
  スコープ名    要素名;

  要素名には単独の識別子か配列を指定します。


  IDLの共用体は、C言語の共用体とswitch文とを合わせたものです。IDLの共用体の要素をcase文に関連付けて定義する必要があります。共用体のswitch文の型定義には、どの要素が使われるかを決定する型を指定しなければなりません。

  case文の定数式はswitch文の型定義と一貫性を持たなければなりません。定数式は0~65535の間の値を指定します。case文のdefaultは1回だけの使用しか許されません。要素内のスコープ名は定義済みの整数、文字、ブーリアン、列挙型のいずれかでなければなりません。case文の定数式はswitch文の型定義で指定された型と一致しなければなりません。

  以下に一致の規則を示します。

long:

longの範囲内のすべての整数値

short:

shortの範囲内のすべての整数値

unsigned long:

unsigned longの範囲内のすべての整数値

unsigned short:

unsigned shortの範囲内のすべての整数値

long long:

long longの範囲内のすべての整数値

char:

char

boolean:

真(TURE)または偽(FALSE)

enum:

enumのすべてのメンバ

  1つの共用体内で要素名は一意でなければなりません。switchで指定した型が列挙型であれば、その識別子は共用体のスコープの中に入ります。そして、その識別子は要素名と違っていなければなりません。共用体の型指定がとりうるすべての値をcase文で指定する必要はありません。共用体の値は型定義の値と、下記のいずれかからなります。

  以下に共用体の記述例を示します。

  union U switch (long) {
        case 1:
            long a;
        case 2:
            short b;
        default:
            char c;
    };