TYPE(reference) の参照では、次を使用できません。
たとえば、次の宣言は無効です。
DECLARE MYFILE FILE STREAM OUTPUT PRINT; DECLARE ZZZ TYPE( P -> Q ); /* INVALID - POINTER-QUALIFIED */ DECLARE URFILE TYPE( MYFILE ); /* INVALID - MYFILE IS CONSTANT */ DECLARE XXX TYPE( AAA(8) ); /* INVALID - HAS SUBSCRIPT LIST */ DECLARE YYY TYPE( FUN( ) ); /* INVALID - HAS ARGUMENT LIST */
型定義では、TYPE 属性を指定できず、次の使用もできません。
たとえば、次の宣言は無効です。
EXPROC: PROCEDURE( XYZ ); DECLARE XYZ FIXED BIN(15), AAA TYPE( XYZ );/* INVALID - XYZ IS A PARAMETER */ DECLARE INT FIXED BIN(15), B TYPE(INT), Y TYPE(B); /* INVALID - B IS TYPED */ DECLARE 1 STRUCA, 2 PROG TYPE (INT), 2 NAMES CHAR(80); STRUCT1 TYPE(STRUCA), STRUCT2 TYPE(STRUCT1.NAMES); /* INVALID - NAMES IS IN TYPED STRUCTURE */
TYPE(reference) の参照では、宣言された変数を直接的にも間接的にも参照できません。そのような参照を行うと、循環定義になります。
たとえば、次の宣言は無効です。
DECLARE 1 PROG, 2 MOD CHAR(80), 2 INT FIXED BIN(15), 2 STRUCZ TYPE(PROG);/* INVALID - DIRECTLY CIRCULAR */ DECLARE 1 STRUCA, 2 MOD CHAR(80), 2 INT FIXED BIN(15), 2 STRUCA TYPE(STRUCB); /* INVALID - INDIRECTLY CIRCULAR */ DECLARE 1 STRUCB, 2 MOD CHAR(80), 2 INT CHAR(80), 2 STRUCA TYPE(STRUCA); /*INVALID - INDIRECTLY CIRCULAR */