構造体修飾参照

構造体メンバーの名前 (主構造体の名前は除く) は同じブロック内で再宣言や再利用が可能であるため、範囲に重複があります。メンバーの名前が同じブロック内で再宣言されている場合、そのメンバーを参照するには上位の構造体の名前で修飾する必要があります。上位の構造体の名前が同じブロック内で再宣言されている場合は、参照があいまいにならないように、さらに上位の構造体の名前を使用して修飾する必要があります。

構造体修飾参照では、一連の名前をレベル番号が小さいものから順番に左から右の順に記述します。名前はピリオドで区切り、ピリオドの前後に空白を記述することもできます。上位のすべての構造体の名前を含める必要はありませんが、参照が一意になるように十分な名前を含める必要があります。次に例を示します。

DECLARE       1  S,
     2          A  FIXED,
     2          B,
     3          A  FLOAT,
     3          C  FLOAT;

この例では、A FLOAT の範囲と A FIXED の範囲が重複するため、参照 A はあいまいです。構造体修飾参照 S.A は A FIXED を参照します。構造体修飾参照 B.A は A FLOAT を参照し、S.B.A も同様です。

主要構造からメンバーまでのすべての構造体の名前を含む構造体修飾参照は完全修飾参照となります。上位の構造体の名前が 1 つ以上省略されている場合は部分修飾参照です。上記の例では、B.A は部分修飾参照であり、S.B.A は完全修飾参照です。S.A、S.B、および S.B.C も完全修飾参照です。

添え字は、構造体修飾参照のいずれの箇所でも使用できますが、対応する境界が宣言された名前の直後にそれぞれ記述することをお勧めします。次に例を示します。

DECLARE     1   S(10),
     2        A    FIXED,
     2        B(3)    FLOAT,
     2        C(3),
     3        D   POINTER;

上記の例では、参照 S(K).A と参照 S.A(K) は同じものを参照しますが、S(K).A の方が推奨されます。同様に、S(K).B(J) や S(K).C(J) のような参照を使用することをお勧めします。