+----------------------------------IBM 拡張----------------------------------+
USAGE IS POINTER 文節を使って定義されたデータ項目は、ポインター・データ項目です。
ポインター・データ項目とは、基底アドレッシングに使用できる 16 バイト基本項目のことです。 ポインター・データ項目は、等しいかどうかを比較したり、他のポインター項目に移したりすることができます。
ポインター・データ項目は、以下でしか使用できません。
USAGE IS POINTER 文節は、66 と 88 を除くすべてのレベルで書くことができます。
グループ項目が USAGE IS POINTER 文節で記述されているなら、そのグループ内の基本項目はポインター・データ項目です。 ただし、そのグループ自身はポインター・データ項目ではなく、ポインター・データ項目が許可されている構文中では使えません。
ポインター・データ項目は、MOVE ステートメントまたは I/O ステートメントの中で参照されているグループの一部になることがあります。 しかし、ポインター・データ項目がグループの一部である場合、ステートメント実行時にポインター値が別の内部表記に変換されることはありません。
ポインター・データ項目は、REDEFINES 文節のサブジェクトまたはオブジェクトになることがあります。
ポインター・データ項目の VALUE 文節は、NULL または NULLS だけを含めることができます。
ポインター・データ項目はクラスまたはカテゴリーに属しておらず、条件変数として使用することはできません。
文節 JUSTIFIED、PICTURE、SIGN、TYPE、BLANK WHEN ZERO、および FORMAT を使用して USAGE IS POINTER 文節で定義されているグループ項目または基本項目を記述することはできません。
ポインター・データ項目は、CORRESPONDING 操作においては無視されます。
ポインター・データ項目をファイルに書くことができますが、そのポインター・データ項目を含むレコードを後で読んだ場合、その項目はもはや有効なアドレスを表すことにはなりません。
USAGE IS POINTER は、ADDRESS OF 特殊レジスターには暗黙で指定され ます。
ILE COBOL ポインター・データ項目を通常の数字として扱うことはできません。
関連情報
この節のポインターの位置合わせについての説明では、ポインターという用語は、ポインター・データ項目とプロシージャー・ポインター・データ項目の両方を指します。
ポインターが参照されたり REDEFINES 文節のサブジェクトであるときは、そのオブジェクト項目は位置合わせされていなければなりません。 言い換えると、レコードの始まりからの位置が 16 バイトの倍数になるオフセットに位置指定されていなければなりません。
作業用ストレージ・セクション、ローカル・ストレージ・セクションまたは ファイル・セクションにおいてポインターとして記述されたデータ項目は位置合わせされます。 ポインターが、レベル番号 01 から始まる構造の一部であれば、コンパイラーはその構造の先頭に位置合わせします。 その後、コンパイラーはポインターの前に FILLER 項目を配置し、データ項目も確実に位置合わせされるようにします。 コンパイラーは、これらの FILLER 項目を追加するときに警告を出します。
リンケージ・セクションでは、以下のとおりです。
ポインターがリンケージ・セクション中の REDEFINES 文節のサブジェクトで、その文節のオブジェクトがポインターでない場合、 ユーザーは、ポインター位置合わせを保持する必要があるという警告を受け取ります。 作業用ストレージ・セクション、ローカル・ストレージ・セクションまたはファイル・セクションでの同様な状況においては、ユーザーが文節のオブジェクトを位置合わせしないと、エラーが発生します。
SYNCHRONIZED 文節は USAGE IS POINTER または USAGE IS PROCEDURE-POINTER 文節とともに指定できますが、この文節はポインター用にすでに暗黙指定されています。
ポインターがテーブルの一部であれば、そのテーブルの最初の項目は位置合わせされ、そのポインターのすべてのオカレンスも必ず同様に位置合わせされるよう、 そのテーブルの終わりに充てん文字項目が追加されることがあります。
データ構造に FILLER 項目が追加されないようにするには、構造の先頭にポインターを配置します。
+------------------------------End of IBM 拡張-------------------------------+