Die Darstellung der Datentypen weist bei den durch ILCS verknüpfbaren Programmiersprachen starke Unterschiede auf. Im Folgenden werden jene Datentypen aufgeführt, die in den einzelnen Programmiersprachen eine gleiche Datendarstellung besitzen und daher problemlos als Parameter übergeben werden können. Bei der Verwendung anderer Datentypen als Parameter ist die genaue Kenntnis der jeweiligen Datenablage erforderlich, um den korrekten Programmablauf sicherzustellen.
Die Übergabe erfolgt „by reference“, d.h. es wird die Adresse des Datums übergeben.
Compiler | Datentypen | |||
Binär | Gleitpunkt | Gleitpunkt | String | |
C / C++ | long | float | double | char <var> [<size>] |
COBOL2000 | PIC S9(i) COMP-5 | COMP-1 | COMP-2 | USAGE DISPLAY |
ASSEMBH | F | E | D | C |
FOR1 | INTEGER*4 | REAL*4 | REAL*8 | CHARACTER*i |
Pascal-XT | long_integer | short_real | long_real | packed array |
PLI1 | BIN FIXED(31) | BIN FLOAT(21) | BIN FLOAT(53) | CHAR(i) |
RPG3 | binäres Feld, | ⎯ | ⎯ | alphanum. Feld, |
UX-Basic | %%,? | ! | !! | $ |
Kompatible Datentypen bei Parameterübergabe
Das aufrufende Programm legt eine Liste der übergebenen Adressen an. Die Anzahl der Parameter wird in Register 0, die Adresse der Liste in Register 1 übergeben (siehe Abschnitt "Registerkonventionen“).
Parameterübergabe in Assembler
Die Daten müssen immer ausgerichtet abgelegt werden; d.h. 32-Bit-Ganzzahlen in binärer Darstellung liegen auf Wortgrenze, Gleitpunktzahlen auf Wort- bzw. Doppelwortgrenze, long long auf Doppelwortgrenze, Strings auf Bytegrenze. Die Länge von Strings ist konstant und dem gerufenen Programm bekannt.
Parameterübergabe in C und C++
In C/C++ werden Parameter laut Sprachdefinition standardmäßig „by value“ übergeben. Diese Art der Parameterübergabe ist uneingeschränkt nur bei Programmsystemen möglich, in denen ausschließlich die Sprachen C und C++ beteiligt sind.
Bei der Verknüpfung mit Objekten in anderen Sprachen müssen folgende Maßnahmen getroffen werden:
Bei Aufruf der anderssprachigen Routine muss in C/C++ die Adresse des zu übergebenden Datenelements angegeben werden, z.B. &par. Technisch gesehen wird dann die Adresse des Datenelements „by value“ übergeben.
Wird eine C/C++-Routine von einer anderssprachigen Routine aufgerufen, müssen die Formalparameter in C/C++ als Zeiger auf die zu übergebenden Datenelemente deklariert werden, z.B. f (T *par).
Parameterübergabe in COBOL
In COBOL85 und COBOL2000 werden Parameter standardmäßig „by reference“ übergeben (siehe Tabelle).
Parameterübergabe „by value“
COBOL2000 kann beliebige numerische Parameter „by value“ übergeben, wenn für das aufgerufene Programm ein Prototyp existiert. Existiert kein Prototyp, ist nur eine eingeschränkte Parameterübergabe „by value“ möglich (siehe nächste Seite).
Lage und Ausrichtung der Daten in der Parameterliste hängen von der Datenbeschreibung im Prototyp ab. Die folgenden Tabellen zeigen im einzelnen, wie sich die Datenbeschreibungen auswirken:
Binärdaten | Darstellung in Parameterliste |
Halbwort (1 <= i <= 4) | rechtsbündig in ausgerichtetem Ganzwort (Byte 1 u. 2 undefiniert) |
Ganzwort (5 <= i <= 9) | ausgerichtetes Ganzwort |
Doppelwort (10 <= i <= 18) | ausgerichtetes Doppelwort (zur Ausrichtung eingefügte Bytes undefiniert) |
Gleitpunktdaten | Darstellung in Parameterliste |
Wort (USAGE COMP-1) | ausgerichtetes Ganzwort |
Doppelwort (USAGE COMP-2) | ausgerichtetes Doppelwort (zur Ausrichtung eingefügte Bytes undefiniert) |
Gepackte (USAGE COMP-3/PACKED DECIMAL) oder abdruckbare (USAGE DISPLAY) numerische Daten sollten nur zwischen COBOL2000-Programmen „by value“ übergeben werden. In der Parameterliste werden sie linksbündig auf Wortgrenze (Länge <8 Byte) bzw. Doppelwortgrenze (Länge >= 8 Byte) abgelegt.
Existiert kein Prototyp, können mit COBOL2000 nur Datenfelder mit den folgenden Definitionen „by value“ übergeben werden:
COMP-5 PIC [S]9(i) (1 <= i <= 9) oder
1 Byte langes Datenfeld beliebigen Typs
Der Parameter wird gegebenenfalls auf 4 Byte erweitert, indem linksbündig mit binären Nullen aufgefüllt wird.
Diese eingeschränkte Übergabe „by value“ ist auch mit COBOL85 ab Version 2.1B möglich.
Übergabe von OMITTED (nur bei COBOL2000 möglich)
Parameter, die bei einem Unterprogrammaufruf weggelassen werden (Angabe OMITTED beim Aufruf, OPTIONAL im Prototyp), werden als ausgerichtetes Ganzwort mit dem Wert X’FFFFFFFF’ in der Parameterliste abgelegt.
Beim OMITTED-Test in einem gerufenen COBOL2000-Programm wird jeder Parameter, der mit der Adresse X’FFFFFFFF’ in der Parameterliste steht, als nicht übergeben (OMITTED) gewertet.
Parameterübergabe in Java
Datenaustausch zwischen C- und Java-Programmen ist möglich, allerdings nicht über die ILCS-Schnittstelle. Informationen zum Datenaustausch zwischen C/C++ und Java entnehmen Sie bitte der Dokumentation zu Java.