別のテーブルのインデックスを使用してテーブル要素 (インデックスのないテーブル) にアクセスすると、IBM ホストでテーブル オーバーフロー エラーが発生する可能性があります。しかし、GnuCOBOL (以前の OpenCOBOL) を使用している場合、同じプログラムがクラッシュしたりメッセージが表示されたりすることはありません (デバッグ オプションを使用しても)。
例えば
IDENTIFICATION DIVISION.
PROGRAM-ID. TSTPROGX.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 IX PIC 9(04) COMP VALUE ZERO.
01 VARS.
05 S-PART-C.
10 S-DETAIL OCCURS 100 TIMES
INDEXED BY S-SUB.
15 S-ACTUAL PIC 9(06) VALUE ZERO.
15 S-ACTUAL-A
REDEFINES S-ACTUAL
PIC X(06).
15 S-GRADE PIC X(02) VALUE LOW-VALUE.
05 POS-USED-ARRAY PIC X(999)
VALUE SPACE.
05 FILLER REDEFINES POS-USED-ARRAY
OCCURS 999.
10 FILLER-X PIC X .
88 POSITIONS-USED-X VALUE 'T'.
PROCEDURE DIVISION.
SET S-SUB TO 1
PERFORM VARYING IX FROM 1 BY 1 UNTIL IX > 999
SET S-SUB TO IX
SET POSITIONS-USED-X(S-SUB) TO TRUE
DISPLAY IX ":" FILLER-X(S-SUB)
END-PERFORM
GOBACK.
この種の使用を避けるために警告を発行するコンパイラ オプションはありますか?
このエラーは、別のテーブルのインデックス (S-SUB) を使用する代わりに、変数 'IX' を使用するなど、正しい使用法を使用することで回避できます。
SET POSITIONS-USED-X(I-X) TO TRUE
一般に、(異なるサイズの) 独立したテーブルのインデックスを交換するのは誤りのようです。