調整可能な配列と構造体

配列と構造体 (さらにはスカラー) は、配列の範囲 (上限や下限)、文字列 (CHAR、GRAPHIC、WIDECHAR、BIT) の長さ、AREA サイズがコンパイル時に不明である場合、調整可能であるとされていますが、プログラム ロジックに基づき実行時に決定されます。このようなデータは、REFER オプション付きの BASED 記憶域クラスを使用した、または BASED または AUTOMATIC 記憶域クラスを使用した、ランタイム式を使用して宣言できます。このような構造体によって定義されたデータを I/O 文を使用して送信する場合、REFER 付きの BASED の方が安全なアプローチであり、常に正しい方法です。

REFER 付き BASED 記憶域の例:

dcl (an, cn) fixed bin(31), DCL p ptr;
dcl 1 s based(p),
         3 x char(4) init('PL/I'),
         3 (as,cs) fixed bin(31),
         3 array(an refer(as)) char(cn refer(cs));
an = 12;
cn = 16;
allocate s;

最後かつ唯一のメンバーを調整可能にすることは、最も効率的な方法です。REFER の数が多いほど、生成されたコード シーケンスはより長くデータを操作します。複雑な使用をすると代償が伴いますが、場合によってはその価値は十分にある点に注意してください。

REFER なしの BASED 記憶域の例:

dcl (an, cn) fixed bin(31), DCL p ptr;
dcl 1 s based(p),
         3 x char(4) init('PL/I'),
         3 array(an) char(cn);
an = 12;
cn = 16;
allocate s;

スカラーの例:

dcl (an) fixed bin(31); 
an = 12;
begin;
   dcl work char(cn);
   /* ... */
end;

このような使い方は、ほとんどの場合単純な REFER の数を自然と最低限に抑えることができるため、最も効率的な例です。