RPG ソースでは、ご存知のとおり演算仕様書の結果のフィールドの位置で
自由に新しいフィールドを定義することができる便利な機能がある。
しかし一般にオープン系では使用するすべての変数は最初に定義しておくのが慣習となっている。
ANSI-C, C/400, VisualBASIC, VC++ , ... もすべて最初に変数を定義する。
RPG を初めて学習する人もそれまでには何らかの開発言語に触れてきているので
他の開発言語と同じように最初に変数を定義すしておくほうがわかりやすい。
0025.00 DICONV_T DS QUALIFIED 0026.00 D ICORV 1 4B 0 INZ(0) 0027.00 D ICOC 5 52B 0 DIM(00012) : : 0038.00 D INPUT S 512A 0039.00 D INPUT_P S * INZ(%ADDR(INPUT)) 0040.00 D INPUT_PP S * 0041.00 D INPLEN S 10I 0 0042.00 D INPL_P S * INZ(%ADDR(INPLEN)) 0043.00 D OUTPUT S 512A 0044.00 D OUTPUT_P S * INZ(%ADDR(OUTPUT)) 0045.00 D OUTPUT_PP S * 0046.00 D OUTLEN S 10I 0 0047.00 D OUTL_P S * INZ(%ADDR(OUTLEN)) 0048.00 D CD DS LIKEDS(ICONV_T) 0049.00 D CD_P S * INZ(%ADDR(CD)) 0050.00 D RES S 4B 0 0051.00 D FROMCODE DS QUALIFIED 0052.00 D CCSID 1 4B 0 0053.00 D OTHER 5 32B 0 DIM(00007) 0054.00 D FROMCODE_P S * INZ(%ADDR(FROMCODE))
S
としてフィールドを定義することができる。
定義仕様書は RPG III には無い、ILE-RPG だけの仕様書である。
D-仕様書では変数を定義すると同時に INZ
キーワードを使って初期化することもできる。
また LIKE
や LIKEDS
を使って同じ属性の変数を再定義することもできる。
*
を使ってポインターを定義するときは %ADDR
によって、指定したある変数の
ポインターをセットすることもできる。
すべての変数を D-仕様書で定義するようにすれば、プログラム内で使用される変数の
属性を探したり変更するのにとても便利でわかりやすいものとなる。
ポインターを必要とする変数を LIKE
や LIKEDS
で定義してはならない。
これは RPG 解説書には書かれていないが LIKE
や LIKEDS
によって
定義されたフィールドは実際には正しく動作しなくなるので注意が必要である。