C のスタック関数

C 関数を呼び出すために、EGL は引数スタック を使用します。これは、関数と呼び出し側コード間で引数を渡すメカニズムです。 EGL 呼び出し関数は、その引数をスタックにプッシュし、呼び出し先の C 関数は、引数をスタックからポップして値を使用します。呼び出し先の関数は、その戻り値をスタックにプッシュし、呼び出し側は、戻り値をスタックからポップして値を取得します。ポップ外部関数および戻り外部関数は、引数スタック・ライブラリーと一緒に提供されます。ポップ外部関数は、引数スタックからそれぞれがポップする値のデータ型に応じて以下のように記述されます。戻り外部関数については、『C の戻り関数』で説明します。

注: ポップ関数は、当初 IBM® Informix® 4GL (I4GL) と一緒に使用されていたので、関数名に「4gl」が含まれています。

値を戻すためのライブラリー関数

引数スタックから数値をポップするには、次のライブラリー関数を C 関数から呼び出すことができます。
次の表、および下記の同様な表では、I4GL バージョン 7.31 より前のバージョンと、バージョン 7.31 およびそれ以降のバージョンとの間で、戻り関数名をマップしています。
バージョン 7.31 より前の名前 バージョン 7.31 およびそれ以降の名前
popint ibm_lib4gl_popMInt
popshort ibm_lib4gl_popInt2
poplong ibm_lib4gl_popInt4
popflo ibm_lib4gl_popFloat
popdub ibm_lib4gl_popDouble
popdec ibm_lib4gl_popDecimal
上記の各関数は、値をポップするためのすべてのライブラリー関数と同様に、以下のアクションを実行します。
  1. 引数スタックから 1 つの値を除去する。
  2. 必要な場合、そのデータ型を変換する。スタックの値が指定した型に変換できない場合、エラーが発生します。
  3. 値を指定の変数にコピーする。

構造型 dec_t および ifx_int8_t は、C プログラムにおける DECIMAL および BIGINT データを表すのに使用されます。 dec_tifx_int8_t 構造型、および DECIMAL 変数と BIGINT 変数を操作および印刷するためのライブラリー関数についての詳細は、「IBM Informix ESQL/C Programmer's Manual」を参照してください。

文字ストリングをポップするためのライブラリー関数

文字の値をポップするには、次のライブラリー関数を呼び出すことができます。

バージョン 7.31 より前の名前 バージョン 7.31 およびそれ以降の名前
popquote ibm_lib4gl_popQuotedStr
popstring ibm_lib4gl_popString
popvchar ibm_lib4gl_popVarChar

ibm_lib4gl_popQuotedStr( ) および ibm_lib4gl_popVarChar( ) の両方は、len バイトをストリング・バッファー *qv に正確にコピーします。 ibm_lib4gl_popQuotedStr( ) は、必要に応じてスペースが埋め込まれますが、ibm_lib4gl_popVarChar( ) は、フルの長さまで埋め込まれません。 バッファーにコピーされる最終バイトは、ストリングを終了する NULL バイトであるので、最大のストリング・データ長は len-1 です。スタック引数が len-1 を超える場合、その末尾バイトが失われます。

len 引数は、受信ストリング・バッファーの最大サイズを設定します。ibm_lib4gl_popQuotedStr( ) を使用すると、スタック上の値が空ストリングであっても、正確に len バイト (末尾ブランク・スペースおよび NULL を含む) を受け取ります。 ibm_lib4gl_popQuotedStr( ) によって検索されたストリングの真のデータ長を求めるには、ポップされた値から末尾スペースを削除する必要があります。
注: 関数 ibm_lib4gl_popString( )ibm_lib4gl_popQuotedStr( ) は、ibm_lib4gl_popString( ) が自動的にすべての末尾ブランクを除去することを除いて、同一です。

時刻値をポップするためのライブラリー関数

DATE、INTERVAL、および DATETIME (TIMESTAMP) 値をポップするには、次のライブラリー関数を呼び出すことができます。

TIMESTAMP 値をポップするには、次のライブラリー関数を呼び出すことができます。
バージョン 7.31 より前の名前 バージョン 7.31 およびそれ以降の名前
popdate ibm_lib4gl_popDate
popdtime ibm_lib4gl_popDateTime
popinv ibm_lib4gl_popInterval

構造型 dtime_t および intrvl_t は、C プログラムにおける DATETIME および INTERVAL データを表すのに使用されます。 qual 引数は、DATETIME または INTERVAL 修飾子のバイナリー表記を受け取ります。dtime_tintrvl_t 構造型、および DATE 変数、 DATETIME 変数、INTERVAL 変数を操作および印刷するためのライブラリー関数についての詳細は、「IBM Informix ESQL/C Programmer's Manual」を参照してください。

BYTE または TEXT 値をポップするためのライブラリー関数

BYTE または TEXT 引数をポップするには、次のライブラリー関数を呼び出すことができます。
バージョン 7.31 より前の名前 バージョン 7.31 およびそれ以降の名前
poplocator ibm_lib4gl_popBlobLocator
構造型 loc_t は、BYTE または TEXT 値を定義します。詳細は「IBM Informix ESQL/C Programmer's Manual」を参照してください。

すべての BYTE または TEXT 引数は、BYTE または TEXT としてポップする必要があります。これは、EGL が自動データ型変換を行わないからです。

関連する参照項目
C の BIGINT 関数
C データ型と EGL プリミティブ型
EGL での C 関数
C の DATE 関数
C の DATETIME および INTERVAL 関数
C の DECIMAL 関数
EGL プログラムからの C 関数の呼び出し
IBM Informix ESQL/C Programmer’s Manual
C の戻り関数

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005.