tipo - ¿Por qué en C++ usamos DWORD en lugar de unsigned int?
unsigned char c (4)
Cuando MS-DOS y Windows 3.1 funcionaban en modo de 16 bits, una palabra de Intel 8086 era de 16 bits, un WORD de Microsoft de 16 bits, un DWORD de Microsoft de 32 bits y un int sin signo de un compilador típico de 16 bits.
Cuando Windows NT operaba en modo de 32 bits, una palabra de Intel 80386 era de 32 bits, un WORD de Microsoft era de 16 bits, un DWORD de Microsoft de 32 bits y el int sin signo de un compilador típico era de 32 bits. Los nombres WORD y DWORD ya no eran autodescriptivos, pero conservaban la funcionalidad de los programas de Microsoft.
Cuando Windows opera en modo de 64 bits, una palabra de Intel es de 64 bits, un WORD de Microsoft de 16 bits, un DWORD de Microsoft de 32 bits y un int sin signo de un compilador típico de 32 bits. Los nombres WORD y DWORD ya no son autodescriptivos, Y una int sin firmar ya no se ajusta al principio de menos sorpresas, pero conservan la funcionalidad de muchos programas.
No creo que WORD o DWORD cambien alguna vez.
Esta pregunta ya tiene una respuesta aquí:
No tengo miedo de admitir que soy un novato en C ++, así que esto podría parecer una pregunta tonta pero ...
Veo que DWORD se usa en todos los lugares en ejemplos de código. Cuando miro lo que realmente significa un DWORD, es aparentemente solo un int sin firmar (0 a 4,294,967,295). Entonces mi pregunta es, ¿por qué tenemos DWORD? ¿Qué nos da que el tipo integral ''unsigned int'' no lo haga? ¿Tiene algo que ver con la portabilidad y las diferencias entre máquinas?
Los desarrolladores de SDK prefieren definir sus propios tipos usando typedef. Esto permite cambiar los tipos subyacentes solo en un lugar, sin cambiar todo el código del cliente. Es importante seguir esta convención. DWORD es poco probable que se modifique, pero los tipos como DWORD_PTR son diferentes en diferentes plataformas, como Win32 y x64. Por lo tanto, si alguna función tiene el parámetro DWORD, use DWORD y no unsigned int, y su código se compilará en todas las versiones futuras de los encabezados de Windows.
Para mí, asumiría que unsigned int es específico de la plataforma. El entero puede ser de 8 bits, 16 bits, 32 bits o incluso 64 bits.
DWORD, por otro lado, especifica su propio tamaño, que es Double Word. Word tiene 16 bits, por lo que DWORD se conocerá como 32 bits en toda la plataforma
DWORD
no es un tipo de C ++, está definido en <windows.h>
.
La razón es que DWORD
tiene un rango y un formato específicos en los que confían las funciones de Windows, por lo que si necesita ese rango específico, use ese tipo. (O como dicen "Cuando estés en Roma, haz lo que hacen los romanos"). Para ti, eso corresponde a unsigned int
, pero puede que ese no sea siempre el caso. Para estar seguro, use DWORD
cuando se espera una DWORD
, independientemente de lo que realmente sea.
Por ejemplo, si alguna vez cambiaran el rango o el formato de unsigned int
, podrían usar un tipo diferente para underWWORD para mantener los mismos requisitos, y todo el código que use DWORD
no sería del tipo sabio. (Del mismo modo, podrían decidir que DWORD
debe estar unsigned long long
, cambiarlo, y todo el código que use DWORD
no sería sabio).
También tenga en cuenta que unsigned int
no necesita tener el rango de 0 a 4,294,967,295. Mira here .