ポインターは、任意のレベル (88 を除く) のプログラムの FILE SECTION、 WORKING-STORAGE SECTION、または LINKAGE SECTION に定義できます。
ポインターが iSeries サーバーで参照される場合、16 バイトのストレージ境界になければなりません。 ポインターの位置合わせは、ILE COBOL コンパイラーによって、グループ項目中のポインター項目の位置を、レコードの先頭から 16 バイトの倍数のオフセットにする処理のことです。 ポインター項目が 16 バイトの境界にない場合は、ポインター位置合わせ例外が ILE COBOL プログラムに送られます。 通常、ポインター位置合わせ例外は LINKAGE セクションで発生します。 そこでの位置合わせは、ユーザーが行うことになります。
FILE SECTION と WORKING-STORAGE SECTION では、コンパイラーは暗黙の FILLER 項目を追加することにより、 この例外が起こらないようにします。 コンパイラーが暗黙の FILLER 項目を追加すると、警告が出されます。 LINKAGE SECTION では、コンパイラーが暗黙の FILLER 項目を追加することはありません。 しかし、FILE SECTION または WORKING-STORAGE SECTION にグループ項目が検出されたとしたら何バイトの FILLER が追加されることになるかを示す警告が出されます。
以下の例のように、USAGE IS POINTER 文節または USAGE IS PROCEDURE-POINTER 文節を指定することで、データ項目をポインターとして定義することができます。
ID DIVISION. PROGRAM-ID. PROGA. WORKING-STORAGE SECTION. 77 APTR USAGE POINTER. 77 APROC-PTR USAGE PROCEDURE-POINTER. 01 AB. 05 BPTR USAGE POINTER. 05 BVAR PIC S9(3) PACKED-DECIMAL. LINKAGE SECTION. 01 AVAR. 05 CVAR PIC X(30). PROCEDURE DIVISION. SET APTR TO ADDRESS OF AVAR. SET APROC-PTR TO ENTRY "PROGA".
上記の例で、AVAR は 01 レベルのデータ項目なので、ADDRESS OF AVAR は ADDRESS OF 特殊レジスターです。 特殊レジスターは実際のストレージ域なので、SET ステートメントにより ADDRESS OF AVAR の内容がポインター・データ項目 APTR に転送されます。
上記の例で、SET ステートメントで ADDRESS OF CVAR が使用される場合には、特殊レジスターは存在しません。 その代わりに、計算された CVAR のアドレスがポインター・データ項目 APTR に割り当てられます。
上記の例の 2 番目の SET ステートメントは、プロシージャー・ポインター・データ項目 APROC-PTR を最外部の ILE COBOL プログラム "PROGA" に設定します。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.