フリー・フォーマットは確かに便利であるし
快適に記述することができるRPGの大きな進歩である。
しかしフリー・フォーマットの中で
RPG演算命令と同じ名前のプロシージャーを自分で
定義して書くとRPG命令と誤解されてSEUやコンパイルの
エラーになってしまう。
_
例えば
0089.00 D*( READ のプロトタイプ宣言 )
0090.00 D READ PR 4B 0
0091.00 D FILE 10A Value
0092.00
:
0626.00 /FREE
0627.00 IF WRITE(RECORD) <> *NULL;
0628.00 READ(RECORD);
0629.00 ELSE;
0630.00 RETURN FALSE;
0631.00 ENDIF;
0632.00 /END-FREE
:
[解説]
このように記述すると
条件文
0627.00 IF WRITE(RECORD) <> *NULL;
はエラーにはならないが
実行文
0628.00 READ(RECORD)
は RPGのREAD 命令であると解釈されてしまって
SEU やコンパイルでもエラーとなってしまう。
これをユーザー定義のプロシージャー名であると
解釈させるには
0628.00 RIFOB_P = READ(RECORD);
のように結果のフィールドも併記すると
SEUやコンパイラーはこれはユーザー定義のプロシージャーの READ であると
解釈してくれるのでエラーにはならない。
ほんの少しの工夫であるが知っておくと簡単に解決することができる。
もちろんこのようなことはIBMマニュアルには記述されていない。
_