構造体 とは、構造体、共用体、要素変数、 および配列であるメンバー・エレメントの集合です。
構造変数 は、データの集合全体を参照するときに 使用される名前です。 ただし配列とは異なり、構造体内の各メンバーにも名前を付けられます。 また、各メンバーの属性を別々にすることもできます。 参照されることがなければ、構造体やメンバーの名前として アスタリスクを使用できます。 例えば、予約項目や埋め込み文字項目を、 アスタリスクで指定することができます。
構造体は、いくつかのレベル を持ちます。 レベル 1 の名前は、大構造体 と呼ばれます。 それより下のレベルの名前は、小構造体または共用体 になります。 最下位のレベルの名前は、基本 名と呼ばれ、 要素変数または配列変数を表すことができます。 共用体の説明については、共用体の項を参照してください。
構造体は、DECLARE ステートメントで、 それぞれの名前の前にレベル番号を付けるという方法によって指定します。 レベル番号は、整数でなければなりません。
大構造体名は、レベル番号 1 を付けて宣言します。小構造体名、共用体、 および基本名は、2 以上のレベル番号を付けて宣言します。区切り文字によって、 レベル番号と関連する名前を区切らなければなりません。 例えば、給与計算レコードの項目を次のように宣言することができます。
declare 1 Payroll, /* major structure name */
2 Name, /* minor structure name */
3 Last char(20), /* elementary name */
3 First char(15),
2 Hours,
3 Regular fixed dec(5,2),
3 Overtime fixed dec(5,2),
2 Rate,
3 Regular fixed dec(3,2),
3 Overtime fixed dec(3,2);
上の例では、Payroll は大構造体で、 それ以外の名前はこの構造体のメンバーとなります。 Name、Hours、 および Rate は小構造体で、 それ以外のすべてのメンバーは、要素変数となります。 構造体全体は、名前 Payroll を使用すれば参照することができ、 構造体内の特定の部分は、その小構造体名を使用すれば参照できます。 メンバーは、メンバー名の参照によって参照することができます。
上の例では、読みやすくするために字下げをしています。 このステートメントを、次のストリングのように続けて書くこともできます。
Declare 1 Payroll, 2 Name, 3 Last char(20), . . .
後続の下位レベルに付けるレベル番号は、連続している必要はありません。 レベル n の小構造体には、その小構造体名と n 以下の レベル番号を持つ次の名前との間にある、n より大きい レベル番号を持つすべての名前が含まれます。
例えば、次の宣言では、先の例の宣言とまったく同じ構造体になります。
Declare 1 Payroll,
4 Name,
5 Last char(20),
5 First char(15),
3 Hours,
6 Regular fixed dec(5,2),
5 Overtime fixed dec(5,2),
2 Rate,
9 Regular fixed dec(3,2),
9 Overtime fixed dec(3,2);
大構造体の記述は、通常、DECLARE ステートメントの終わりのセミコロンで終了します。 また、コンマで終了する場合もあり、この場合はあとに別の項目の宣言が続きます。