Unterschiedlich definierte Typen
Nach oben zu Unterstützung für Delphi-Datentypen und Sprachkonzepte
Typen, die in Object Pascal und in C++ unterschiedlich definiert sind, sind in der Regel unbedenklich. Die seltenen Fälle, die Probleme verursachen, sind meist eher versteckt. Daher werden diese Typen in diesem Abschnitt behandelt.
Boolesche Datentypen
Der True
-Wert für die Object Pascal-Datentypen ByteBool, WordBool und LongBool wird in Object Pascal als –1 und der False
-Wert als 0 dargestellt.
- Hinweis: Der Boolesche Datentyp bleibt unverändert (True = 1, False = 0).
Der C++-Typ bool konvertiert diese Object Pascal-Typen korrekt. Es gibt aber ein Problem, wenn eine WinAPI-Funktion oder eine andere Funktion gemeinsam genutzt wird, die einen Windows-BOOL-Typ verwendet, der als 1 dargestellt wird. Wenn ein Wert an einen Parameter vom Typ BOOL übergeben wird, wird er in Object Pascal zu –1 und in C++ zu 1 ausgewertet Wenn Sie Code in den beiden Sprachen gemeinsam nutzen, schlagen Vergleiche der beiden Bezeichner fehl, es sei denn, beide sind 0 (False, false). Zur Umgehung dieses Problems können Sie die folgende Vergleichsmethode verwenden:
!A == !B;
Die folgende Tabelle zeigt die Ergebnisse dieser Methode für den Vergleich auf Gleichheit:
Vergleich auf Gleichheit der Variablen !A == !B des Typs BOOL
Object Pascal | C++ | !A == !B |
---|---|---|
0 (False) |
0 (false) |
!0 == !0 (TRUE) |
0 (False) |
1 (true) |
!0 == !1 (FALSE) |
-1 (True) |
0 (false) |
!-1 == !0 (FALSE) |
-1 (True) |
1 (true) |
!-1 == !1 (TRUE) |
Mit dieser Methode werden alle Vergleiche korrekt ausgewertet.
Char-Datentypen
In C++ ist der Typ char mit einem Vorzeichen behaftet, in Object Pascal nicht. Eine Situation, in der dieser Unterschied Probleme verursachen könnte, ist bei der gemeinsamen Nutzung von Quelltext äußerst selten.