C 関数を呼び出すために、EGL は引数スタック を使用します。これは、関数と呼び出し側コード間で引数を渡すメカニズムです。 EGL 呼び出し関数は、その引数をスタックにプッシュし、呼び出し先の C 関数は、引数をスタックからポップして値を使用します。 呼び出し先の関数は、その戻り値をスタックにプッシュし、呼び出し側は、戻り値をスタックからポップして値を取得します。 ポップ外部関数および戻り外部関数は、引数スタック・ライブラリーと一緒に提供されます。 戻り外部関数については以下で説明します。 使用されるポップ外部関数については、『C のスタック関数』で説明しています。
外部戻り関数は、その引数を呼び出し側関数の外部に割り当てられたストレージにコピーします。このストレージは、戻り値がポップされると解放されます。この状態では、値を関数のローカル変数から戻すことが可能になります。
値を戻すためのライブラリー関数
値を戻すために使用可能なライブラリー関数は、次のとおりです。
バージョン 7.31 より前の名前 | バージョン 7.31 およびそれ以降の名前 |
---|---|
retint | ibm_lib4gl_returnMInt |
retshort | ibm_lib4gl_returnInt2 |
retlong | ibm_lib4gl_returnInt4 |
retflo | ibm_lib4gl_returnFloat |
retdub | ibm_lib4gl_returnDouble |
retdec | ibm_lib4gl_returnDecimal |
retquote | ibm_lib4gl_returnQuotedStr |
retstring | ibm_lib4gl_returnString |
retvchar | ibm_lib4gl_returnVarChar |
retdate | ibm_lib4gl_returnDate |
retdtime | ibm_lib4gl_returnDateTime |
retinv | ibm_lib4gl_returnInterval |
ibm_lib4gl_returnQuotedStr( ) の引数は、ヌル終了ストリングです。ibm_lib4gl_returnString( ) 関数は、対称性のためのみにインクルードされ、内部で ibm_lib4gl_returnQuotedStr( ) を呼び出します。
C 関数は、どの書式でもデータを戻すことができます。変換が可能な場合、EGL は、値をポップするときに必要に応じてデータ型を変換します。 データ型の変換が可能でない場合は、エラーが発生します。
EGL から呼び出された C 関数は、常に return(n) 文で終了する必要があります。この場合、n は、スタック上にプッシュされた戻り値の数です。何も戻さない関数は、return(0) で終了する必要があります。