141 votes

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

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

Je vois DWORD utilisée partout dans les exemples de code. Quand je regarde vers le haut un DWORD signification réelle, c’est apparemment juste un unsigned int (0 à 4 294 967 295). Donc ma question est, pourquoi ne nous avons DWORD ? Ce qu’il nous procure que le type intégral « unsigned int » ne fonctionne pas ? A-t-elle quelque chose à voir avec la portabilité et les différences de machine ?

180voto

GManNickG Points 155079

DWORD n'est pas une C++, il est défini en <windows.h>.

La raison en est qu' DWORD a une gamme spécifique et le format des fonctions de Windows s'appuyer sur, donc si vous avez besoin précis d'utilisation de la portée de ce type. (Ou comme ils disent, "à Rome, fais comme les Romains.") Pour vous, ce qui arrive à correspondre unsigned int, mais qui pourrait ne pas toujours être le cas. Pour être sûr, utiliser DWORD lorsque DWORD est prévu, indépendamment de ce qu'il peut effectivement être.

Par exemple, si jamais ils ont changé la plage ou le format de l' unsigned int ils pourraient utiliser un autre type de sous-tendent DWORD de garder les mêmes exigences, et l'ensemble du code à l'aide de DWORD serait cependant pas le plus sage. (De même, ils pourraient décider DWORD faut unsigned long long, le modifier, et l'ensemble du code à l'aide de DWORD serait cependant pas le plus sage.)


Notez également unsigned int n'est pas nécessaire de disposer d'une gamme de 0 à 4 294 967 295. Voir ici.

99voto

Windows programmer Points 5365

Lorsque MS-DOS et Windows 3.1 exploité en mode 16 bits, un processeur Intel 8086 mot de 16 bits, Microsoft WORD est de 16 bits, Microsoft DWORD 32 bits, et un type de compilateur, unsigned int est de 16 bits.

Lorsque Windows NT exploité en mode 32 bits, un processeur Intel 80386 mot était de 32 bits, Microsoft WORD est de 16 bits, Microsoft DWORD 32 bits, et un type de compilateur, unsigned int a été de 32 bits. Les noms de WORD et DWORD n'étaient plus des auto-descriptif, mais ils ont conservé les fonctionnalités de Microsoft programmes.

Lorsque Windows fonctionne en mode 64 bits, un processeur Intel mot est de 64 bits, Microsoft WORD est de 16 bits, Microsoft DWORD 32 bits, et un type de compilateur, unsigned int de 32 bits. Les noms de WORD et DWORD ne sont plus auto-descriptif, ET un unsigned int n'est plus conforme au principe de moins de surprises, mais ils préserver la fonctionnalité de bon nombre de programmes.

Je ne pense pas que WORD ou DWORD ne changera jamais.

13voto

Alex Farber Points 19387

SDK développeurs préfèrent définir leurs propres types utilisant typedef. Cela permet de changer les types sous-jacents seulement dans un endroit, sans changer tout le code client. Il est important de suivre cette convention. DWORD est peu susceptible d’être modifié, mais les types comme DWORD_PTR sont différents dans différentes plates-formes, comme Win32 et x64. Donc, si une fonction a paramètre DWORD, utilisez DWORD et pas unsignedInt, et votre code sera compilé dans toutes les versions d’en-têtes windows future.

10voto

YeenFei Points 2100

Pour ma part, je suppose qu’unsigned int est plateforme spécifique. Entier peut être 8 bits, 16 bits, 32 bits ou 64 bits même.

DWORD dans l’autre main, spécifie sa propre taille, c'est-à-dire mot doublé. Word étant 16 bits DWORD s’appellera 32bits sur toute plate-forme

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X