Nächste Seite: Charakteristik verschiedener Typen Aufwärts: Systemspezifische Besonderheiten Vorherige Seite: Restriktionen des Einpass-Compilers

## Typentransfer und Typenkonversion

Die systemnahe Programmierung macht es zeitweilen nötig, einer Variablen innerhalb eines Ausdrucks einen neuen Typ zu geben. Dabei wird die Bitkombination der Speicherzelle, die für eine Variable des Ursprungtyps reserviert ist, unverändert in einen neuen Zieltyp übernommen. Dabei müssen jedoch die Grössen des Ursprungtyps sowie des Zieltyps gleich gross sein.

Programme, die diesen Mechanismus verwenden, sind allerdings schlecht portierbar, da der Speicherbedarf der einzelnen Typen nicht auf allen Rechnern gleich ist. Wird ein solcher Typentransfer benötigt, muss dafür in die Prozedur `CAST` aus dem Modul `SYSTEM` importiert werden. Dadurch ist die Systemabhängigkeit bereits in der Importliste angezeigt.

Der vielleicht bekannte Mechanismus, dass ein Ausdruck geklammert und von einem Typnamen angeführt wird, ist ebenfalls noch enthalten. Allerdings wird dann kein Typentransfer, sondern eine sichere Typenkonversion ausgeführt. Dies macht eigentlich die Prozeduren `ORD`, `CHR`, `FLOAT` und `VAL` unnötig, sie bleiben jedoch aus Gründen der Kompatibilität in der Sprache enthalten, sollten aber nicht mehr verwendet werden. Die Typenkonversion funktioniert nur mit den unstruktierten Typen, also auch mit Unterbereichen und Aufzählungstypen.

`LONGINT("B")` | entspricht | `ORD("B")`
`CHAR(66)` | entspricht | `CHR(66)`
`REAL(100)` | entspricht | `FLOAT(100)`
| ... |
`BITSET(3)` | Geht nicht, da nicht unstrukturiert

Die Verwendung von Typkonversionen bietet den Vorteil, dass der Compiler angewiesen werden kann, einen ganz bestimmten Typ zu erzeugen. Die Funktion `ORD()` konvertiert immer zu einem `LONGINT`. Soll aber das Resultat einer Konversion beispielsweise einer Variablen vom Typ `INTEGER` zugewiesen werden, muss anschliessend wieder zu `INTEGER` konvertiert und dazu zusätzlicher Code erzeugt werden. Dies kann mit Typkonversionen vermieden werden.

Viele Betriebssystemroutinen geben einen zu wenig spezifischen Zeigertyp oder gar `ADDRESS` zurück. Für die Weiterverarbeitung muss der Typ des Resultats konvertiert werden. Dies geschieht mit einer `CAST`-Anweisung, die den Resultatstyp in den für die weitere Bearbeitung nötigen Typ umwandelt. In gewissen Fällen wird durch dieses Vorgehen eine Hilfsvariable benötigt, die unter Umständen danach nie mehr verwendet wird.

Damit dies möglich ist, musste die Syntax erweitert werden:

Nächste Seite: Charakteristik verschiedener Typen Aufwärts: Systemspezifische Besonderheiten Vorherige Seite: Restriktionen des Einpass-Compilers