Partilhar via


Os novos tipos de dados

Três classes de tipos de dados foram introduzidas para o Windows de 64 bits: tipos de dados de precisão fixa, tipos de precisão de ponteiro e tipos de precisão de ponteiro específico. Esses tipos foram adicionados ao ambiente de desenvolvimento para permitir que os desenvolvedores se preparem para o Windows de 64 bits. Esses tipos são derivados do inteiro básico da linguagem C e dos tipos longos. Portanto, você pode usar esses tipos de dados no código que compila e testa no Windows de 32 bits e recompilar com o compilador de 64 bits ao direcionar o Windows de 64 bits.

Mesmo para aplicativos destinados apenas ao Windows de 32 bits, a adoção desses novos tipos de dados torna seu código mais robusto. Para usar esses tipos de dados, você deve verificar seu código quanto ao uso potencialmente inseguro de ponteiro, polimorfismo e definições de dados. Por exemplo, quando uma variável é do tipo ULONG_PTR, fica claro que ela será usada para conversão de ponteiros para operações aritméticas ou polimorfismo. Não é possível indicar esse uso diretamente usando os tipos de dados mais antigos. (Você pode fazer isso indiretamente usando nomenclatura de tipo derivado ou notação húngara, mas ambas as técnicas são propensas a erros.)

Todos esses tipos de dados são declarados em BaseTsd.h. Para obter mais informações, incluindo definições desses tipos de dados, consulte Tipos de dados do Windows.

Precisão fixa

Os tipos de dados de precisão fixa têm o mesmo comprimento no Windows de 32 e 64 bits. Para ajudá-lo a se lembrar disso, sua precisão faz parte do nome do tipo de dados. Veja a seguir os tipos de dados de precisão fixa.

Termo Descrição
DWORD32
Inteiro sem sinal de 32 bits
DWORD64
Inteiro sem sinal de 64 bits
INT32
Inteiro com sinal de 32 bits
INT64
Inteiro com sinal de 64 bits
LONG32
Inteiro com sinal de 32 bits
LONG64
Inteiro com sinal de 64 bits
UINT32
INT32 sem sinal
UINT64
INT64 sem sinal
ULONG32
LONG32 sem sinal
ULONG64
LONG64 sem sinal

Precisão do ponteiro

À medida que a precisão do ponteiro é alterada (ou seja, à medida que se torna 32 bits no Windows de 32 bits e 64 bits com o Windows de 64 bits), os tipos de dados de precisão do ponteiro refletem a precisão adequadamente. Portanto, é seguro converter um ponteiro para um desses tipos ao executar aritmética de ponteiro; se a precisão do ponteiro for de 64 bits, o tipo será de 64 bits. Os tipos de contagem também refletem o tamanho máximo ao qual um ponteiro pode se referir. Veja a seguir os tipos de precisão de ponteiro e contagem.

Termo Descrição
DWORD_PTR
Tipo longo sem sinal para precisão do ponteiro.
HALF_PTR
Metade do tamanho de um ponteiro. Use dentro de uma estrutura que contém um ponteiro e dois campos pequenos.
INT_PTR
Tipo inteiro com sinal para precisão do ponteiro.
LONG_PTR
Tipo longo assinado para precisão do ponteiro.
SIZE_T
O número máximo de bytes aos quais um ponteiro pode se referir. Use para uma contagem que deve abranger o intervalo completo de um ponteiro.
SSIZE_T
SIZE_T assinado.
UHALF_PTR
HALF_PTR sem sinal.
UINT_PTR
INT_PTR sem sinal.
ULONG_PTR
LONG_PTR sem sinal.

Tipos de Pointer-Precision específicos

Os novos tipos de ponteiro a seguir dimensionam explicitamente o ponteiro. Tenha cuidado ao usar ponteiros no código de 64 bits: se você declarar o ponteiro usando um tipo de 32 bits, o sistema operacional criará o ponteiro truncando um ponteiro de 64 bits. (Todos os ponteiros são de 64 bits no Windows de 64 bits.)

Termo Descrição
POINTER_32
Um ponteiro de 32 bits. No Windows de 32 bits, esse é um ponteiro nativo. No Windows de 64 bits, esse é um ponteiro truncado de 64 bits.
POINTER_64
Um ponteiro de 64 bits. No Windows de 64 bits, esse é um ponteiro nativo. No Windows de 32 bits, esse é um ponteiro de 32 bits estendido por sinal.
Observe que não é seguro assumir o estado do bit de ponteiro alto.