Compartir a través de


Nuevos tipos de datos

Se introdujeron tres clases de tipos de datos para Windows de 64 bits: tipos de datos de precisión fija, tipos de precisión de puntero y tipos de precisión de puntero específicos. Estos tipos se agregaron al entorno de desarrollo para permitir a los desarrolladores prepararse para Windows de 64 bits. Estos tipos se derivan del entero básico del lenguaje C y los tipos largos. Por lo tanto, puede usar estos tipos de datos en el código que compile y pruebe en Windows de 32 bits y, a continuación, volver a compilar con el compilador de 64 bits cuando tenga como destino Windows de 64 bits.

Incluso para las aplicaciones que tienen como destino solo Windows de 32 bits, la adopción de estos nuevos tipos de datos hace que el código sea más sólido. Para usar estos tipos de datos, debe examinar el código para detectar el uso de punteros potencialmente no seguros, el polimorfismo y las definiciones de datos. Por ejemplo, cuando una variable es de tipo ULONG_PTR, está claro que se usará para convertir punteros para operaciones aritméticas o polimorfismo. No es posible indicar este uso directamente mediante los tipos de datos más antiguos. (Puede hacerlo indirectamente mediante la nomenclatura de tipos derivados o la notación húngaro, pero ambas técnicas son propensas a errores).

Todos estos tipos de datos se declaran en BaseTsd.h. Para obtener más información, incluidas las definiciones de estos tipos de datos, vea Tipos de datos de Windows.

Precisión fija

Los tipos de datos de precisión fija tienen la misma longitud en Windows de 32 y 64 bits. Para ayudarle a recordar esto, su precisión forma parte del nombre del tipo de datos. A continuación se muestran los tipos de datos de precisión fija.

Término Descripción
DWORD32
Entero de 32 bits sin signo
DWORD64
Entero de 64 bits sin signo
INT32
Entero de 32 bits con signo
INT64
Entero de 64 bits con signo
LONG32
Entero de 32 bits con signo
LONG64
Entero de 64 bits con signo
UINT32
Unsigned INT32
UINT64
Unsigned INT64
ULONG32
LONG32 sin signo
ULONG64
Long64 sin signo

Precisión del puntero

A medida que cambia la precisión del puntero (es decir, a medida que se convierte en 32 bits en Windows de 32 bits y 64 bits con Windows de 64 bits), los tipos de datos de precisión de puntero reflejan la precisión en consecuencia. Por lo tanto, es seguro convertir un puntero a uno de estos tipos al realizar aritmética de puntero; si la precisión del puntero es de 64 bits, el tipo es de 64 bits. Los tipos de recuento también reflejan el tamaño máximo al que puede hacer referencia un puntero. A continuación se muestran los tipos de precisión de puntero y recuento.

Término Descripción
DWORD_PTR
Tipo largo sin signo para la precisión del puntero.
HALF_PTR
Mitad del tamaño de un puntero. Use dentro de una estructura que contenga un puntero y dos campos pequeños.
INT_PTR
Tipo entero con signo para la precisión del puntero.
LONG_PTR
Tipo largo con signo para la precisión del puntero.
SIZE_T
Número máximo de bytes a los que puede hacer referencia un puntero. Se usa para un recuento que debe abarcar el intervalo completo de un puntero.
SSIZE_T
SIZE_T firmado.
UHALF_PTR
HALF_PTR sin signo.
UINT_PTR
INT_PTR sin signo.
ULONG_PTR
LONG_PTR sin signo.

Tipos de Pointer-Precision específicos

Los siguientes tipos de puntero nuevos tamañon explícitamente el puntero. Tenga cuidado al usar punteros en código de 64 bits: si declara el puntero mediante un tipo de 32 bits, el sistema operativo crea el puntero truncando un puntero de 64 bits. (Todos los punteros son de 64 bits en Windows de 64 bits).

Término Descripción
POINTER_32
Puntero de 32 bits. En Windows de 32 bits, se trata de un puntero nativo. En Windows de 64 bits, se trata de un puntero de 64 bits truncado.
POINTER_64
Puntero de 64 bits. En Windows de 64 bits, se trata de un puntero nativo. En Windows de 32 bits, se trata de un puntero de 32 bits extendido de signo.
Tenga en cuenta que no es seguro asumir el estado del bit de puntero alto.