Unterschiedlich definierte Typen

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

Siehe auch