Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Parameterübergabe

&pagelevel(4)&pagelevel

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
Wort

Gleitpunkt
Wort

Gleitpunkt
Doppelwort

String

C / C++

long

float

double

char <var> [<size>]

COBOL2000
COBOL85

PIC S9(i) COMP-5
SYNC                    
5 <= i <= 9

COMP-1

COMP-2

USAGE DISPLAY

ASSEMBH
(@-Makros)

F

E

D

C

FOR1

INTEGER*4

REAL*4

REAL*8

CHARACTER*i

Pascal-XT

long_integer

short_real         

long_real            

packed array
[<range>] of char

PLI1

BIN FIXED(31)
ALIGNED

BIN FLOAT(21)
DEC FLOAT(6)

BIN FLOAT(53)
DEC FLOAT(16)

CHAR(i)

RPG3

binäres Feld,
0 Dezimalstel.

alphanum. Feld,
feste Länge

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                                                           
PIC [S]9(i) USAGE {COMP | COMP-5 | BINARY}

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.