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