各宣言の形式は次のとおりです。
level identifier[(bound-pair)][(,…bound-pair)][attribute…]
または
level(declaration)[,…(declaration)][(bound-pair)][(,…bound-pair)][attribute…]
DECLARE 1 PAYROLL, 2 NAME, 3 LAST CHARACTER(70) VARYING, 3 FIRST CHARACTER(70) VARYING, 2 SALARY FIXED DECIMAL(6,2);
この文では、PAYROLL という名前の構造体を宣言しています。この構造体では、修飾された参照で姓にアクセスできます。
PAYROLL.NAME.LAST = 'JONES';
姓と名は属性が同じであるため、同じ構造を次のようにして宣言できます。
DECLARE 1 PAYROLL, 2 NAME, 3 (LAST,FIRST) CHARACTER(70) VARYING 2 SALARY FIXED DECIMAL(6,2);
次の例は、UNION 属性を含む宣言を示しています。
DECLARE 1 CONSUMER_INFO, . . . 3 PHONE_DATA UNION, 4 PHONE_NUMBER CHARACTER (13), 4 ELEMENTS, 5 LEFT_PAREN CHARACTER (1), 5 AREA_CODE CHARACTER (3), 5 RIGHT_PAREN CHARACTER (1), 5 EXCHANGE CHARACTER (3), 5 HYPHEN CHARACTER (1), 5 ACTUAL_NUMBER CHARACTER (4), 3 ADDRESS_DATA, . . .
この例では、PHONE_DATA の直属のメンバー (PHONE_NUMBER および ELEMENTS) の宣言に関連付けられた UNION 属性で同じ記憶域を共有するため、PHONE NUMBER を変更すると ELEMENTS の 1 つ以上のメンバーも変更されます。同様に、ELEMENTS のメンバーを変更すると PHONE_NUMBER も変更されます。一方、ADDRESS_DATA のメンバーには、PHONE_DATA の直属のメンバーではないため UNION 属性は適用されません。ADDRESS_DATA のメンバーには、通常の構造体メンバーと同じように個別の記憶域が割り当てられます。
説明
構造体の宣言では、構造体の構成と構造体の各レベルのメンバーの名前を定義します。各宣言で構造体のメンバーを指定し、前にレベル番号を付ける必要があります。それぞれのレベルで単一の変数を宣言できるほか、配列や他の構造体の宣言などの 1 つ以上の完全な宣言を含めることもできます。主構造体の名前を構造体レベル 1 として宣言します。下位のメンバーは 1 よりも大きいレベル番号で宣言する必要があります。