CALL ステートメントにおけるポインターの使用

CALL ステートメントの中でポインター・データ項目またはプロシージャー・ポインター・データ項目が渡されると、 その項目は他のすべての USING 項目と同じように扱われます。 すなわち、ポインター・データ項目が BY REFERENCE (または BY CONTENT) によって渡されると、 そのポインター・データ項目を指すポインター (またはポインター・データ項目のコピー) が、呼び出し先プログラムに渡されます。 ポインター・データ項目が BY VALUE によって渡されると、ポインター・データ項目の内容は呼び出しスタックに入れられます。 プロシージャー・ポインター・データ項目も同じ方法で渡されます。

BY CONTENT 句の指定された CALL ステートメントを使用してポインターとポインターを含むグループ項目を渡す場合は、特別な考慮が必要です。 これは、MOVE ステートメントの場合も同じです。 CALL...BY CONTENT の場合は、項目の暗黙の MOVE が実行されてその項目が一時域に作成されます。 このポインター MOVE に関するポインター位置合わせを行うため、ILE COBOL コンパイラーまたはランタイムは、16 バイト境界に関する BY CONTENT 項目のオフセットを判別しなければなりません。 最高のパフォーマンスを得るためには、ILE COBOL コンパイラーがこのオフセットを判別するのと同じ方法で BY CONTENT 項目をコーディングする必要があります。

BY CONTENT 項目が次のようになっている場合は、ILE COBOL ランタイムが 16 バイト境界に関する項目のオフセットを判別する必要があります。

オペランドが参照変更されている場合、 そのオフセットは、参照変更の開始位置から 1 を引いて、データ構造中のオペランドのオフセットを足したものになります。 オペランドが LINKAGE SECTION 中にある場合、そのオフセットは呼び出し側プログラムにより判別されます。

ポインターの位置合わせに関する問題を避けるため、BY REFERENCE を使用して項目を渡してください。