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. |