如果使用另一个表的索引访问表元素(没有索引的表),则可能会在 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.
是否有编译器选项来发出警告以避免这种用法?
通过使用正确的用法可以避免此错误。即,使用变量“IX”,而不是使用不同表的索引(S-SUB)。
SET POSITIONS-USED-X(I-X) TO TRUE
一般来说,交换独立表(不同大小)的索引似乎是错误的。