Types définis différemment

De RAD Studio
Aller à : navigation, rechercher

Remonter à Gestion des types de données et des concepts du langage Delphi


Les types définis différemment en Pascal Objet et en C++ ne sont normalement pas causes de problèmes. Les rares cas problématiques peuvent s’avérer subtiles. Pour cette raison, ces types sont évoqués dans cette section.

Types de données booléens

La valeur True des types de données ByteBool, WordBool et LongBool du Pascal Objet est représentée par –1 en Pascal Objet. False est représenté par 0.

Remarque : Le type de données Boolean reste inchangé (True = 1, False = 0).

Même si le type de données bool du type C++ convertit correctement ces types Pascal Objet, il y a un problème lors du partage de fonctions WinAPI ou de toute autre fonction utilisant le type BOOL de Windows qui est représenté par 1. Si une valeur est transmise à un paramètre de type BOOL, il est évalué en –1 pour le Pascal Objet et en 1 pour le C++. Donc, si vous partagez du code entre ces deux langages, la comparaison de deux identificateurs échoue sauf si les deux valent 0 (False, false). Pour contourner ce problème, utilisez la méthode de comparaison suivante :

 !A == !B;

Le tableau suivant montre les résultats de l'utilisation de cette méthode de test d'égalité :

Test d’égalité !A == !B de variables BOOL

Pascal Objet 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)


En utilisant cette méthode de comparaison, le résultat obtenu est correct pour toutes les valeurs.

Types de données Char

Le type char du C++ est un type signé alors que c’est un type non signé en Pascal Objet. Il est très peu probable que se produise une situation dans laquelle cette différence pose problème pour partager du code.

Voir aussi