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')