Types définis différemment
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.