Programmiersprache Pascal

Typcasts

Die Technik ist aus C bekannt:
Um den Wert eines Typs t1 in einen Wert des Typs t2 zu konvertieren, wird dem zu konvertierenden Wert der Name des Zieltyps vorangestellt.
In einigen Pascal-Versionen sieht dies zu aus:
  VAR v1 : t1;
      v2 : t2;

  v2 := t2(v1);
Turbo Pascal, Delphi

Typecasts sind möglich wenn die Typen t1 und t2 ordinal oder Zeiger-Datentypen sind.

Beispiele:

  Integer('A')                 liefert 65
  Char(42)                     liefert '*'
  Boolean(0)                   liefert FALSE
  Color(2)
  Longint(@Buffer)
  BytePtr(Ptr($40, $49))
Gnu Pascal

Typcasts sind möglich und nicht auf ordinale und Zeiger-Datentypen beschränkt.
Es gibt allerdings - sinnvollerweise - Beschränkungen.

Beispiel:

  PROGRAM cast(OUTPUT);
  TYPE pint = ^INTEGER;
       pchar = ^CHAR;
       pbool = ^BOOLEAN;
       preal = ^REAL;
  VAR i : INTEGER VALUE 64;
      c : CHAR VALUE '*';
      r : REAL VALUE 1.23;
      b : BOOLEAN VALUE TRUE;
      pi : pint;
      pc : pchar;
      v1, v2 : ^void;
  BEGIN
    Writeln(i, ' ', Char(i),    ' ', Real(i), ' ', Boolean(i));
    Writeln(c, ' ', Integer(c), ' ', Real(c), ' ', Boolean(i));
    Writeln(r, ' ', Integer(r), ' ', Boolean(i));
    Writeln(b, ' ', Integer(b), ' ', Real(b));

    New(pi);  pi^ := i;
    v1 := pi;
    Writeln(pint(v1)^, ' ', pchar(v1)^, ' ', preal(v1)^, ' ', pbool(v1)^);

    New(pc);  pc^ := c;
    v2 := pc;
    Writeln(pint(v2)^, ' ', pchar(v2)^, ' ', preal(v2)^, ' ', pbool(v2)^);
  END.
Konvertierungen REAL -> CHAR und BOOLEAN -> CHAR werden zurückgewiesen.
Testergebnisse:
PC
          64 @  6.4000000e+01   True
  *         42  4.2000000e+01   True
   1.2300000e+00          1   True
    True          1  1.0000000e+00
          64 @  7.6516622e-309   True
  1347241258 *  7.6520084e-309   True

RS/6000
          64 @  6.4000000e+01   True
  *         42  4.2000000e+01   True
   1.2300000e+00          1   True
    True          1  1.0000000e+00
          64   1.3664849e-312  False
   704643072 *  2.1800754e-106   True
Werte, die über untypisierte Zeiger geliefert werden, sollten mit äußerster Vorsicht behandelt werden !



P. Böhme, 30.08.1996