構造体

構造体は、階層的に順序付けされた、さまざまなデータ型の値のセットです。構造体の直下のコンポーネントを構造体のメンバーと呼びます。別の構造体のメンバーである構造体をサブ構造体と呼びます。サブ構造体ではない構造体を主構造体と呼びます。

構造体の階層構造は、次の例に示すように、レベル番号を使用して指定します。

DECLARE 1 S,
      2 A FIXED BINARY,
      2 B FLOAT BINARY, 
      2 T,
            3 P POINTER,
            3 Q CHARACTER(10);

この例では、S は主構造体 (レベル 1 構造体) です。主構造体のレベル番号は、いずれも 1 でなければなりません。A、B、および T は S のメンバーです。T は、P および Q をメンバーとするサブ構造体です。

メンバーのレベル番号は、通常、そのメンバーを含む構造体よりも 1 大きい番号になります。ただし、そのメンバーを含む構造体よりも大きく、そのメンバーに含まれるメンバーよりも小さい番号であれば、任意のレベル番号を指定することができます。次に例を示します。

DECLARE 1 S,
      20 A FIXED BINARY,
      20 B FLOAT BINARY, 
      20 T,
            30 P POINTER,
            30 Q CHARACTER(10);

この例の構造体は、前の例で示した構造体と同じです。

構造体全体をストリーム入出力またはレコード入出力で送信したり、引数として渡したり、サイズと形状が同じで、対応する同一のデータ型のメンバーを持つ別の構造体に割り当てたりすることができます。ただし、構造体全体に対する変換や計算は実行できません。

構造体に可変サイズのメンバーが 1 つ以上含まれている場合、それらのメンバーについては、固定サイズのすべてのメンバーを先に配置してから構造体の末尾に配置します。このように配置することで、固定サイズのメンバーのアドレス指定が明確になります。

構造体のメンバーは、変数の参照が可能な任意のコンテキストで参照できます。メンバーの名前が同じ範囲内 (つまり、同じブロックまたはそれを含むブロック) でほかに宣言されていなければ、メンバーの名前だけで参照することができます。

メンバーの名前は、そのメンバーを直接含む構造体内で一意でなければなりませんが、他の構造体のメンバーの名前や非メンバーの名前として使用することができます。メンバーの名前が複数のオブジェクトに使用されている場合、それらの各メンバーを参照するには、対象のメンバーを一意に識別できるように上位の構造体の名前を使用して十分に修飾する必要があります。修飾参照では、使用する名前を階層の順序に従ってピリオドで区切って記述します。次に例を示します。

DECLARE        A FIXED BINARY;
DECLARE        1 S,
                  2 A FLOAT BINARY, 
                  2 T,
                     3 A POINTER;

この例では、参照 A は固定小数点変数への参照です。参照 S.A は浮動小数点変数への参照です。参照 T.A または S.T.A はポインター変数への参照です。

主構造体の名前を修飾子として使用することをお勧めします。また、主構造体や上位の構造体の中で同じメンバー名を複数回使用することは避けることをお勧めします。詳細については、「参照」の章の「参照解決」のセクションを参照してください。

構造体には UNION 属性を適用できます。この属性は、その構造体の直属のメンバーがすべて同じメモリ位置を占めることを示します。詳細については、「宣言と属性」の章を参照してください。