RPG

76. CALLB と CALLP との違い

ILEでサブ・プロシージャーを呼び出す命令としてCALLB と CALLP とがある。

どちらもサブ・プロシージャーを呼び出す命令なのでどのように違うのか、やや紛らわしい点がある。

簡単に言ってしまえば、CALLB が古くて、CALLP が新しい命令である。

IBM は最初に CALLB を発表したが、すぐに CALLP を追加した。

CALLB とはプロシージャーのプロトタイプを宣言しない呼び出しであり、CALLP は

プロシージャーのプロトタイプを宣言してからプロシージャーを呼び出す方法である。

また、CALLB はプロシージャー・パラメータの最後に戻り値を定義するがCALLP は結果の

フィールドとして定義する。よって CALLB による呼び出しでは CALLP に比べて指定する

パラメータがひとつ余分に必要となる。

パラメータや戻り値を持たないプロシージャーの呼び出しは、どちらもほとんど見た目に

変わりが無い。

ただし米国雑誌などでは CALLP の使用を強く推薦しているようである。

【 CALLB の例 】
C                   CALLB     'CGIPARM'          
C                   PARM      'SHCODE'      FLD  
C                   PARM                    VALUE
【 CALLP の例 】
D*( CGIPARM  のプロトタイプ宣言 )                      
D CGIPARM         PR           256A                    
D  FLDNAM                       10A   Value   
         
C                   EVAL      VALUE = CGIPARM('SHCODE')