RPG

76. CALLB と CALLP との違い

ILEでサブ・プロシージャーを呼び出す命令としてCALLBCALLP とがある。
どちらもサブ・プロシージャーを呼び出す命令なのでどのように違うのか、やや紛らわしい点がある。
簡単に言ってしまえば、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')