別々に定義された型

提供: RAD Studio
移動先: 案内検索

Delphi データ型および言語概念のサポート への移動


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 型です。コードの共有時にこの相違点が問題になる状況が発生することは、非常にまれです。

関連項目