Pourquoi en C ++ utilisons-nous DWORD plutôt que unsigned int?

Je n’ai pas peur d’admettre que je suis un peu un débutant en C ++, donc cela peut sembler une question idiote mais ….

Je vois DWORD utilisé partout dans les exemples de code. Lorsque je recherche ce que signifie réellement un DWORD, il ne s’agit apparemment que d’un entier non signé (0 à 4 294 967 295). Alors ma question est la suivante: pourquoi avons-nous DWORD? Qu’est-ce que cela nous donne que le type intégral ‘unsigned int’ ne le fait pas? Cela a-t-il quelque chose à voir avec la portabilité et les différences de machine?

DWORD n’est pas un type C ++, il est défini dans .

La raison en est que DWORD a une plage et un format spécifiques DWORD lesquels reposent les fonctions Windows. Par conséquent, si vous avez besoin de cette plage spécifique, utilisez ce type. (Ou comme on dit: “Quand à Rome, fais comme les Romains”). Pour vous, cela correspond à unsigned int , mais ce n’est peut-être pas toujours le cas. Pour être sûr, utilisez DWORD lorsqu’un DWORD est attendu, indépendamment de ce qu’il peut être réellement.

Par exemple, s’ils modifiaient la plage ou le format de unsigned int ils pourraient utiliser un type différent de DWORD pour conserver les mêmes exigences, et tout le code utilisant DWORD ne serait pas le plus sage. (De même, ils pourraient décider que DWORD doit être unsigned long long , le modifier et que tout le code utilisant DWORD ne sera pas plus sage.)


Notez également que unsigned int n’a pas nécessairement la plage 0 à 4 294 967 295. Voir ici

Lorsque MS-DOS et Windows 3.1 fonctionnaient en mode 16 bits, un mot Intel 8086 était 16 bits, un WORD Microsoft 16 bits, un Microsoft DWORD 32 bits et un int non signé typique du compilateur était 16 bits.

Lorsque Windows NT fonctionnait en mode 32 bits, un mot Intel 80386 était 32 bits, un WORD Microsoft 16 bits, un Microsoft DWORD 32 bits et un int non signé typique du compilateur était 32 bits. Les noms WORD et DWORD n’étaient plus auto-descriptifs mais ils préservaient les fonctionnalités des programmes Microsoft.

Lorsque Windows fonctionne en mode 64 bits, un mot Intel est 64 bits, un mot Microsoft WORD 16 bits, un mot Microsoft DWORD 32 bits et un int non signé du compilateur 32 bits. Les noms WORD et DWORD ne sont plus auto-descriptifs, ET un int non signé ne se conforme plus au principe de la moindre surprise, mais conserve la fonctionnalité de nombreux programmes.

Je ne pense pas que WORD ou DWORD changera jamais.

Les développeurs de SDK préfèrent définir leurs propres types en utilisant typedef. Cela permet de modifier les types sous-jacents uniquement dans un seul endroit, sans modifier tout le code client. Il est important de suivre cette convention. Il est peu probable que DWORD soit modifié, mais les types tels que DWORD_PTR sont différents sur des plates-formes différentes, telles que Win32 et x64. Donc, si certaines fonctions ont un paramètre DWORD, utilisez DWORD et non unsigned int, et votre code sera compilé dans toutes les futures versions des en-têtes Windows.

Pour moi, je suppose que unsigned int est spécifique à la plate-forme. Entier pourrait être 8 bits, 16 bits, 32 bits ou même 64 bits.

DWORD, d’autre part, spécifie sa propre taille, qui est Double Word. Word est 16 bits, donc DWORD sera connu comme 32 bits sur toute la plate-forme