別々に定義された型
Object Pascal と C++ で別々に定義された型は、通常は問題になりません。ただし、まれにではありますが、これらが問題になる場合があります。そのため、ここではそれらの型について説明します。
論理データ型
Object Pascal では、Object Pascal の ByteBool、WordBool、および LongBool データ型の True
値は -1、False
値は 0 で表されます。
- メモ: Boolean データ型は、そのまま(True = 1、False = 0)変わりません。
C++ の bool 型はこれらの Object Pascal の型を正しく変換しますが、Windows の BOOL 型(1 で表される)を使用する WinAPI 関数などを共有するときに問題があります。ある値が BOOL 型のパラメータに渡された場合、Object Pascal ではそれが -1 になり、C++ では 1 になります。そのため、これら 2 つの言語間でコードを共有した場合、2 つの識別子が共に 0(False、false)でない場合にも、比較が失敗する可能性があります。回避策として、次の比較方法を使用できます。
!A == !B;
次の表に、この方法を等値比較に使用した場合の結果を示します。
BOOL 変数の等価比較 !A == !B
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) |
この比較方法を使用すれば、どの値の組み合わせも正しく評価されます。
文字データ型
文字型は、C++ では signed 型ですが、Object Pascal では unsigned 型です。コードの共有時にこの相違点が問題になる状況が発生することは、非常にまれです。