RPG

82. フィールドのポインターを取得する %ADDR

%ADDR はILEの発表とともに追加された V3R2M0から使えるBIFFコードである。
%ADDR はフィールドのポインター値を戻す。
RPGの開発者にとってポインターを示す %ADDR など、なぜ必要なのかと思われるかもしれない。
RPGでポインタの必要性があるのかと疑問になるかもしれない。
最初に「ILEの発表とともに」と説明したのには理由がある。
ANSI-C 言語で *SRVPGM を開発してRPGからそれを利用するケースを考えて欲しい。
また汎用性のある高度なAPI を使用する場合も同じである。
長さの不明なパラメータ値を取得する場合にはC言語では、変数値そのものではなく
変数のポインターと長さをパラメータとして受け取る場合が多い。
ポインターとはフィールドの開始位置(番地)を示すものであるがポインターを受け取ることに
よって任意の長さの変数に対応することができるからである。
Java はポインターの機能がないので、このようなことはできないが。
またパラメータを戻り値として使用する場合はポインターの使用は必須である。
このことはこのサイトのC/400の項を参照されたい。
API のマニュアルを参照してポインター( * ) を要求しているようであれば%ADDR を使って
ポインターを渡すことが必要となる。
RPG からC/400のAPI を使用したい場合は %ADDR を使うケースが多くなるはずである。
最近のOS400 API の多くはこのような傾向にある。

【例】STACK という配列の LV番目をプロシージャー RESUME に渡す

     CALLP RESUME(%ADDR(STACK(LV)))