Nouveaux types de données

Trois classes de types de données ont été introduites pour Windows 64 bits : les types de données à précision fixe, les types de précision de pointeur et les types de précision de pointeur spécifique. Ces types ont été ajoutés à l’environnement de développement pour permettre aux développeurs de se préparer pour Windows 64 bits. Ces types sont dérivés des types entier et long du langage C de base. Par conséquent, vous pouvez utiliser ces types de données dans du code que vous compilez et testez sur Windows 32 bits, puis recompilez avec le compilateur 64 bits lorsque vous ciblez Windows 64 bits.

Même pour les applications qui ciblent uniquement Windows 32 bits, l’adoption de ces nouveaux types de données rend votre code plus robuste. Pour utiliser ces types de données, vous devez analyser votre code à la recherche d’une utilisation potentiellement dangereuse des pointeurs, du polymorphisme et des définitions de données. Par exemple, lorsqu’une variable est de type ULONG_PTR, il est clair qu’elle sera utilisée pour couler des pointeurs pour les opérations arithmétiques ou le polymorphisme. Il n’est pas possible d’indiquer une telle utilisation directement à l’aide des types de données plus anciens. (Vous pouvez le faire indirectement en utilisant un nommage de type dérivé ou une notation hongroise, mais les deux techniques sont sujettes à des erreurs.)

Tous ces types de données sont déclarés dans BaseTsd.h. Pour plus d’informations, y compris les définitions de ces types de données, consultez Types de données Windows.

Précision fixe

Les types de données de précision fixe sont de la même longueur dans Windows 32 et 64 bits. Pour vous aider à vous en souvenir, leur précision fait partie du nom du type de données. Voici les types de données à précision fixe.

Terme Description
DWORD32
Entier non signé 32 bits
DWORD64
Entier non signé 64 bits
INT32
Entier 32 bits signé
INT64
Entier 64 bits signé
LONG32
Entier 32 bits signé
LONG64
Entier 64 bits signé
UINT32
INT32 non signé
UINT64
INT64 non signé
ULONG32
LONG32 non signé
ULONG64
LONG64 non signé

Précision du pointeur

À mesure que la précision du pointeur change (c’est-à-dire qu’elle devient 32 bits sur Windows 32 bits et 64 bits avec Windows 64 bits), les types de données de précision du pointeur reflètent la précision en conséquence. Par conséquent, il est sûr de caster un pointeur vers l’un de ces types lors de l’exécution arithmétique du pointeur ; si la précision du pointeur est de 64 bits, le type est de 64 bits. Les types de nombre reflètent également la taille maximale à laquelle un pointeur peut faire référence. Voici les types de précision de pointeur et de nombre.

Terme Description
DWORD_PTR
Type long non signé pour la précision du pointeur.
HALF_PTR
La moitié de la taille d’un pointeur. Utilisez dans une structure qui contient un pointeur et deux petits champs.
INT_PTR
Type entier signé pour la précision du pointeur.
LONG_PTR
Type long signé pour la précision du pointeur.
SIZE_T
Nombre maximal d’octets auxquels un pointeur peut faire référence. Utilisez pour un nombre qui doit s’étendre sur la plage complète d’un pointeur.
SSIZE_T
SIZE_T signé.
UHALF_PTR
HALF_PTR non signé.
UINT_PTR
INT_PTR non signé.
ULONG_PTR
LONG_PTR non signés.

Types de Pointer-Precision spécifiques

Les nouveaux types de pointeurs suivants dimensionne explicitement le pointeur. Soyez prudent lorsque vous utilisez des pointeurs dans du code 64 bits : si vous déclarez le pointeur à l’aide d’un type 32 bits, le système d’exploitation crée le pointeur en tronqué un pointeur 64 bits. (Tous les pointeurs sont de 64 bits sur Windows 64 bits.)

Terme Description
POINTER_32
Pointeur 32 bits. Sur Windows 32 bits, il s’agit d’un pointeur natif. Sur Windows 64 bits, il s’agit d’un pointeur 64 bits tronqué.
POINTER_64
Pointeur 64 bits. Sur Windows 64 bits, il s’agit d’un pointeur natif. Sur Windows 32 bits, il s’agit d’un pointeur 32 bits étendu aux signes.
Notez qu’il n’est pas sûr de supposer l’état du bit de pointeur élevé.