ポインター・データ項目やプロシージャー・ポインター・データ項目は、REDEFINES 文節の主語 (サブジェクト) にすることも目的語 (オブジェクト) にすることもできます。
ポインターが REDEFINES 文節のサブジェクトである場合は、そのオブジェクト・データ項目は 16 バイト境界になければなりません。 たとえば、以下の場合、
WORKING-STORAGE SECTION. 01 AB. 05 ALPHA-NUM PIC X(16). 05 APTR REDEFINES ALPHA-NUM USAGE POINTER. 05 BPTR USAGE POINTER. 05 CPTR REDEFINES BPTR USAGE POINTER.
上記の例では、APTR と CPTR は、いずれも 16 バイト位置合わせがなされている項目を再定義するポインター・データ項目です。 次の例では、再定義された項目によって重大なコンパイラー・エラーになります。
WORKING-STORAGE SECTION. 01 EF. 05 ALPHA-NUM PIC X(5). 05 HI. 10 ALPHA-NUM-TWO PIC X(11). 10 APTR USAGE POINTER. 05 BPTR REDEFINES HI USAGE POINTER.
上記の例では、APTR が 16 バイトの境界に位置合わせされます。 したがって、ILE COBOL コンパイラーが FILLER 項目を追加して APTR を位置合わせする必要はありません。 グループ項目 HI は 16 バイト境界にないので、ポインター・データ項目 BPTR も 16 バイト境界にはなりません。 ILE COBOL コンパイラーが FILLER 項目を追加して BPTR を 16 バイトの境界にすることができないため、重大エラーになります。
次の例は上記の例と似ていますが、ILE COBOL コンパイラーはポインター・データ項目を 16 バイト境界にすることができます。
WORKING-STORAGE SECTION. 01 EF. 05 ALPHA-NUM PIC X(5). 05 HI. 10 ALPHA-NUM-TWO PIC X(11). 10 APTR USAGE POINTER. 10 ALPHA-NUM-THREE PIC X(5). 05 KL REDEFINES HI. 10 BPTR USAGE POINTER.
この例では、グループ項目 KL は 16 バイト境界になりませんが、 コンパイラーは 11 バイトの FILLER をポインター・データ項目 BPTR の前に追加することによって、BPTR が 16 バイト境界になるようにします。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.