LIKE

LIKE は、宣言されている変数が参照先の変数と同じ構造を持つことを示します。形式は次のとおりです。

LIKE reference

reference は、構造体変数への参照です。

宣言されている変数は構造体変数でなければなりません。LIKE を使用すると、その変数が、参照先の構造体変数と同じメンバー (名前および属性が同じ) を持つようになります。レベル番号のみが、必要に応じて、宣言されている変数に合わせて変更されます。

次の例では、LIKE 属性を使用して別の宣言の構造体メンバーを複製しています。

DECLARE 1 TEMPLATE BASED, 
   2 NAME CHAR(45),
   2 SALARY FIXED BIN(15), 
   2 EMP_NO FIXED BIN(15);
DECLARE 1 EMPLOYEE_INFO(1000) LIKE TEMPLATE;

TEMPLATE のメンバーが複製されて EMPLOYEE_INFO の宣言が展開されると、EMPLOYEE_INFO の宣言は次のようになります。

DECLARE 1 EMPLOYEE_INFO(1000), 
   2 NAME CHAR(45),
   2 SALARY FIXED BIN(15),
   2 EMP_NO FIXED BIN(15);

参照先の変数は、主構造体でも副構造体でもかまいません。修飾子も使用できますが、ポインター修飾子は使用できません。参照先の変数には次の制約事項が適用されます。

LIKE 属性の機能は TYPE 属性の機能に似ています。LIKE では、TYPE と同様に、作成される構造体に参照先の構造体のストレージ クラスは引き継がれませんが、TYPE とは違って、参照先の変数の整列属性や次元も引き継がれません。参照先の変数のサブ構造体および要素の整列や次元のみが引き継がれます。

注: LIKE では UNALIGNED 属性が引き継がれないため、構造体のマッピング規則のために 2 つの LIKE 構造体の整列やサイズが同じにならないことがあります。