新しいデータ型

64 ビット Windows では、固定有効桁数データ型、ポインター精度型、および特定のポインター精度型の 3 つのクラスのデータ型が導入されました。 これらの型は、開発者が 64 ビット Windows 用に準備できるように開発環境に追加されました。 これらの型は、基本的な C 言語整数と long 型から派生します。 そのため、32 ビット Windows でコンパイルしてテストし、64 ビット Windows を対象とする場合は 64 ビット コンパイラで再コンパイルするコードで、これらのデータ型を使用できます。

32 ビット Windows のみを対象とするアプリケーションでも、これらの新しいデータ型を採用すると、コードの堅牢性が高まります。 これらのデータ型を使用するには、コードをスキャンして、安全でない可能性のあるポインターの使用、ポリモーフィズム、およびデータ定義を確認する必要があります。 たとえば、変数が ULONG_PTR 型の場合、算術演算またはポリモーフィズムのポインターのキャストに使用されることは明らかです。 古いデータ型を使用して、このような使用法を直接示すことはできません。 (派生型の名前付けまたはハンガリー語表記を使用して間接的にこれを行うことができますが、どちらの手法もエラーが発生しやすいです)。

これらのデータ型はすべて BaseTsd.h で宣言されています。 これらのデータ型の定義など、詳細については、「 Windows データ型」を参照してください。

固定有効桁数

固定精度データ型は、32 ビットと 64 ビットの両方の Windows で同じ長さになります。 これを覚えておくために、精度はデータ型の名前の一部です。 固定精度データ型を次に示します。

項目 説明
DWORD32
32 ビット符号なし整数
DWORD64
64 ビット符号なし整数
Int32
32 ビット符号付き整数
INT64
64 ビット符号付き整数
LONG32
32 ビット符号付き整数
LONG64
64 ビット符号付き整数
Uint32
符号なし INT32
UINT64
符号なし INT64
ULONG32
符号なし LONG32
ULONG64
符号なし LONG64

ポインターの有効桁数

ポインターの精度が変化すると (つまり、32 ビット Windows では 32 ビットになり、64 ビットの Windows では 64 ビットになる)、ポインター精度データ型はそれに応じて精度を反映します。 したがって、ポインターの算術演算を実行するときは、これらの型のいずれかにポインターをキャストしても安全です。ポインターの有効桁数が 64 ビットの場合、型は 64 ビットです。 カウント型には、ポインターが参照できる最大サイズも反映されます。 ポインターの有効桁数とカウント型を次に示します。

項目 説明
DWORD_PTR
ポインターの有効桁数の符号なし long 型。
HALF_PTR
ポインターの半分のサイズ。 ポインターと 2 つの小さなフィールドを含む構造体内で を使用します。
INT_PTR
ポインターの有効桁数の符号付き整数型。
LONG_PTR
ポインターの有効桁数の符号付き long 型。
Size_t
ポインターが参照できる最大バイト数。 ポインターの全範囲にまたがる必要があるカウントには、 を使用します。
SSIZE_T
署名された SIZE_T
UHALF_PTR
符号なし HALF_PTR
UINT_PTR
符号なし INT_PTR
ULONG_PTR
符号なし LONG_PTR

特定のPointer-Precisionの種類

次の新しいポインター型は、ポインターのサイズを明示的に設定します。 64 ビット コードでポインターを使用する場合は注意してください。32 ビット型を使用してポインターを宣言すると、オペレーティング システムは 64 ビット ポインターを切り捨ててポインターを作成します。 (すべてのポインターは、64 ビット Windows では 64 ビットです)。

項目 説明
POINTER_32
32 ビット ポインター。 32 ビット Windows では、これはネイティブ ポインターです。 64 ビット Windows では、これは切り捨てられた 64 ビット ポインターです。
POINTER_64
64 ビット ポインター。 64 ビット Windows では、これはネイティブ ポインターです。 32 ビット Windows では、これは符号拡張 32 ビット ポインターです。
高いポインター ビットの状態を想定しても安全ではないことに注意してください。