Rückgabefunktionen für C

Zum Aufrufen einer C-Funktion verwendet EGL einen Argumentstack. Dies ist ein Mechanismus, der Argumente zwischen den Funktionen und dem aufrufenden Code übergibt. Die EGL-Aufruffunktion übergibt ihre Argumente an den Stack. Die aufgerufene C-Funktion ruft die Argumente aus dem Stack ab, um die Werte zu verwenden. Die aufgerufende Funktion übergibt ihre Rückgabewerte an den Stack. Die aufrufende Funktion ruft sie ab, um die Werte abzurufen. Die externen Funktionen für den Abruf und die Rückgabe werden mit der Argumentstackbibliothek bereitgestellt. Die externen Rückgabefunktionen (return) sind nachfolgend beschrieben. Die verwendeten externen Abruffunktionen (pop) sind unter Stackfunktionen für C beschrieben.

Die externen Rückgabefunktionen kopieren ihre Argumente in Speicher, der außerhalb der aufrufenden Funktion zugeordnet ist. Dieser Speicher wird freigegeben, sobald der zurückgegebene Wert mit 'pop' abgerufen wurde. Diese Situation ermöglicht die Rückgabe von Werten aus lokalen Variablen der Funktion.

Anmerkung: Die Rückgabefunktionen wurden ursprünglich bei IBM® Informix 4GL (I4GL) verwendet. Die Funktionsnamen enthalten daher die Angabe '4gl'.

Bibliotheksfunktionen für die Rückgabe von Werten

Für die Rückgabe von Werten stehen folgende Bibliotheksfunktionen zur Verfügung:
In der folgenden Tabelle sind die Zuordnungen der Rückgabefunktionsnamen zwischen I4GL vor Version 7.31 und Version 7.31 bzw. höher aufgeführt:
Name bei Version vor 7.31 Name bei Version 7.31 und höher
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

Das Argument von ibm_lib4gl_returnQuotedStr( ) ist eine auf Null endende Zeichenfolge. Die Funktion ibm_lib4gl_returnString( ) ist nur aus Gründen der Symmetrie aufgeführt. Sie ruft intern die Funktion ibm_lib4gl_returnQuotedStr( ) auf.

Die C-Funktion kann Daten in jedem beliebigen Format zurückgeben. Falls eine Konvertierung möglich ist, konvertiert EGL beim Abrufen des Wertes den Datentyp wie erforderlich. Ist keine Konvertierung des Datentyps möglich, tritt ein Fehler auf.

C-Funktionen, die aus EGL aufgerufen werden, müssen stets die Anweisung return(n) als Exit verwenden, wobei n die Anzahl der Rückgabewerte ist, die in den Stack übertragen wurden. Eine Funktion, die keinen Wert zurückgibt, muss return(0) als Exit verwenden.


Feedback