前の章では %ADDR
でポインターを定義できることを学んだ。
本章では、別の方法によるポインターの定義の方法を紹介しよう。
D RESDTA S 10A BASED(RESP) : C EVAL RESP = GetWEBENV(KWDP)
上記の例のように BASED
を使ってポインター RESP
を定義することができる。
BASED
は基底を意味していて RESP
というポインターを基底とする変数 RESDTA
を
定義することを意味している。
ポインター RESP
は
D RESP S *
のようにして別途にポインターであることを定義する必要はない。
BASED(RESP)
の記述だけで RESP
はポインターであると定義されたことになる。
このように BASED
を使ってポインターを定義する目的は API などから
戻り値としてポインターを受け取る場合である。
そして戻り値としてのポインターは別の変数を表しているはずである。
C EVAL RESP = GetWEBENV(KWDP)
のようにして別の関数(プロシージャー)からの戻り値をポインターとして受け取り
そのポインターは何らかの変数を代表しているときに BASED
を使ってポインターを定義しておけば
C EVAL RESP = GetWEBENV(KWDP)
の演算の次には、直ちに
C EVAL RESP = GetWEBENV(KWDP) C MOVEL RESDTA DSPSIZ_
のように RESDTA
を使用することができる。
このように戻り値をポインターで受け取る場合には BASED
でポインターを定義しておくと
有効であることがわかる。
逆にパラメータとしてポインターを渡す場合には %ADDR
によってポインターを定義する手法を
とることが有効となる。
これで使用目的によってポインターの定義の仕方が異なることが明確になった。
このようなことまでは IBM 解説書にも解説はされていない。
使用目的による定義が異なることを明確に区別しておけば実践において混乱することはなくなるだろう。
この章で学んだことは
BASED
を使ってポインターを定義することができるBASED
は戻り値がポインターである場合の定義として有効である%ADDR
によるポインターの定義はパラメータとしてポインターを渡す場合に有効である