Nuovi tipi di dati

Sono state introdotte tre classi di tipi di dati per Windows a 64 bit: tipi di dati a precisione fissa, tipi di precisione puntatore e tipi di precisione del puntatore specifici. Questi tipi sono stati aggiunti all'ambiente di sviluppo per consentire agli sviluppatori di preparare Windows a 64 bit. Questi tipi sono derivati dall'intero del linguaggio C di base e dai tipi long. È quindi possibile usare questi tipi di dati nel codice compilato e testato in Windows a 32 bit e quindi ricompilare il compilatore a 64 bit quando si punta a Windows a 64 bit.

Anche per le applicazioni destinate solo a Windows a 32 bit, l'adozione di questi nuovi tipi di dati rende il codice più affidabile. Per usare questi tipi di dati, è necessario analizzare il codice per l'utilizzo di puntatori potenzialmente non sicuri, polimorfismo e definizioni di dati. Ad esempio, quando una variabile è di tipo ULONG_PTR, è chiaro che verrà usata per i puntatori di cast per operazioni aritmetiche o polimorfismo. Non è possibile indicare direttamente tale utilizzo usando i tipi di dati meno recenti. È possibile eseguire questa operazione indirettamente usando la denominazione del tipo derivato o la notazione ungherese, ma entrambe le tecniche sono soggette a errori.

Tutti questi tipi di dati vengono dichiarati in BaseTsd.h. Per altre informazioni, incluse le definizioni di questi tipi di dati, vedere Tipi di dati di Windows.

Precisione fissa

I tipi di dati a precisione fissa sono la stessa lunghezza in Windows a 32 e a 64 bit. Per ricordarlo, la precisione fa parte del nome del tipo di dati. Di seguito sono riportati i tipi di dati di precisione fissa.

Termine Descrizione
DWORD32
Intero senza segno a 32 bit
DWORD64
Intero senza segno a 64 bit
INT32
Intero con segno a 32 bit
INT64
Intero con segno a 64 bit
LONG32
Intero con segno a 32 bit
LONG64
Intero con segno a 64 bit
UINT32
Senza segno INT32
UINT64
Senza segno INT64
ULONG32
Unsigned LONG32
ULONG64
Senza segno LONG64

Precisione puntatore

Man mano che la precisione del puntatore cambia , ovvero diventa 32 bit in Windows a 32 bit e 64 bit con Windows a 64 bit, i tipi di dati di precisione del puntatore riflettono di conseguenza la precisione. Pertanto, è sicuro eseguire il cast di un puntatore a uno di questi tipi durante l'esecuzione di aritmetica puntatore; se la precisione del puntatore è 64 bit, il tipo è a 64 bit. I tipi di conteggio riflettono anche le dimensioni massime a cui può fare riferimento un puntatore. Di seguito sono riportati i tipi di precisione e conteggio puntatore.

Termine Descrizione
DWORD_PTR
Tipo lungo senza segno per la precisione del puntatore.
HALF_PTR
Metà delle dimensioni di un puntatore. Usare all'interno di una struttura contenente un puntatore e due campi di piccole dimensioni.
INT_PTR
Tipo integer firmato per la precisione del puntatore.
LONG_PTR
Tipo lungo firmato per precisione puntatore.
SIZE_T
Numero massimo di byte a cui può fare riferimento un puntatore. Usare per un conteggio che deve estendere l'intervallo completo di un puntatore.
SSIZE_T
SIZE_T firmato.
UHALF_PTR
HALF_PTR senza segno.
UINT_PTR
INT_PTR senza segno.
ULONG_PTR
LONG_PTR senza segno.

Tipi di Pointer-Precision specifici

I nuovi tipi di puntatore seguenti ridimensionano in modo esplicito il puntatore. Prestare attenzione quando si usano puntatori nel codice a 64 bit: se si dichiara il puntatore usando un tipo a 32 bit, il sistema operativo crea il puntatore troncando un puntatore a 64 bit. Tutti i puntatori sono 64 bit in Windows a 64 bit.

Termine Descrizione
POINTER_32
Puntatore a 32 bit. In Windows a 32 bit si tratta di un puntatore nativo. In Windows a 64 bit, questo è un puntatore a 64 bit troncato.
POINTER_64
Puntatore a 64 bit. In Windows a 64 bit questo è un puntatore nativo. In Windows a 32 bit si tratta di un puntatore a 32 bit esteso per l'accesso.
Si noti che non è sicuro presupporre lo stato del bit del puntatore elevato.