新しいデータ型
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 ビット ポインターです。 高いポインター ビットの状態を想定しても安全ではないことに注意してください。 |