プロシージャー・ポインター・データ・タイプ
プロシージャー・ポインターは、プロシージャーまたは関数を指すために使 用されます。 プロシージャー・ポインターは、プログラムにバインドされた入り口点を指します。 プロシージャー・ポインターは、定義仕様書で定義されます。
プロシージャー・ポインター項目を定義するには、自由形式定義
に POINTER(*PROC) キーワードを指定するか、または、
固定形式仕様書のデータ・タイプ記入項目にアスタリスク (*) を
指定し、PROCPTR キーワードも指定します。
プロシージャー・ポインター・フィールドは 16 バイトの長さでなければなら ず、16 バイト境界で位置合わせされていなければなりません。 境界位置合わせについてのこの要件によって、データ構造のポインター・サブフィ ールドが前のフィールドに直接続かない原因となったり、また、複数オカレンス・データ 構造で発生が連続しない原因となる可能性があります。 サブフィールドの位置合わせの詳細については、データ構造サブフィールドの位置合わせを参照して ください。
プロシージャー・ポインターのデフォルトの初期化値は *NULL です。
例
図 1. ポインターの定義
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++++
*
* 基底ポインター・フィールドを定義し、
* データ構造 My_Struct のアドレスに初期化します。
*
D My_Struct DS
D My_array 10 DIM(50)
D
D Ptr1 S 16* INZ(%ADDR(My_Struct))
*
* 同様に、長さが定義されない場合にはデフォルトの長さ 16 が使用されます。
*
D Ptr1 S * INZ(%ADDR(My_Struct))
*
* プロシージャー・ポインター・フィールドを定義し、NULL に初期化します。
*
D Ptr1 S 16* PROCPTR INZ(*NULL)
*
* プロシージャー・ポインター・フィールドを定義し、
* プロシージャー My_Proc のアドレスに初期化します。
*
D Ptr1 S 16* PROCPTR INZ(%PADDR(My_Proc))
*
* 複数回繰返しデータ構造でのポインターを定義し、
* ストレージの計画を立てます。
*
DDataS DS OCCURS(2)
D ptr1 *
D ptr2 *
D Switch 1A
