RPG

502. フリー・フォーマットの予約語を避けるには

フリー・フォーマットは確かに便利であるし
快適に記述することができる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マニュアルには記述されていない。
_