Por que em C++ usamos DWORD em vez de int sem sinal? [duplicado]

Não tenho medo de admitir que sou uma novata em C++, por isso pode parecer uma pergunta Parva, mas ... ...

vejo a palavra D usada por todo o lado em exemplos de código. Quando eu olho para o que um DWORD realmente significa, é aparentemente apenas um int não assinado (0 a 4,294,967,295). Então a minha pergunta é: porque temos o DWORD? O que nos dá isso? o tipo integral 'unsigned int' não? Tem alguma coisa a ver com portabilidade e diferenças de máquinas?

Author: academicRobot, 2010-06-08

4 answers

DWORD não é um tipo C++, é definido em <windows.h>.

A razão é que DWORD tem um intervalo específico e formato em que as funções do Windows dependem, por isso, se necessitar que esse intervalo específico use esse tipo. (Ou como eles dizem " quando em Roma, faça como os romanos fazem.") Para ti, isso corresponde a unsigned int, mas isso pode nem sempre ser o caso. Para ser Seguro, utilize DWORD quando for esperado um DWORD, independentemente do que possa realmente ser.

Por exemplo, se alguma vez mudaram o intervalo ou format of unsigned int they could use a different type to underly DWORD to keep the same requirements, and all code using DWORD would be none-the-wiser. (Da mesma forma, eles poderiam decidir DWORD precisa ser unsigned long long, mudá-lo, e todo o código usando {[[0]} não seria mais sábio.)


Também Nota unsigned int não é necessário tem o intervalo 0 a 4294,967,295. Veja Aqui.

 170
Author: GManNickG, 2017-05-23 12:02:30

Quando o MS-DOS e o Windows 3.1 operavam no modo 16-bit, Uma Palavra Int 8086 era 16 bits, uma palavra Microsoft era 16 bits, uma palavra Microsoft DWORD era 32 bits, e um compilador típico int não assinado era 16 bits.

Quando o Windows NT operava no modo 32-bit, Uma Palavra Int 80386 era 32 bits, uma palavra Microsoft era 16 bits, uma palavra Microsoft DWORD era 32 bits, e um compilador típico int não assinado era 32 bits. Os nomes palavra e palavra DWORD não eram mais auto-descritivos, mas preservaram o funcionalidade dos programas Microsoft.

Quando o Windows opera no modo 64-bit, Uma Palavra Intel é 64 bits, uma palavra Microsoft é 16 bits, uma palavra Microsoft DWORD é 32 bits, e um compilador típico int não assinado é 32 bits. Os nomes palavra e palavra DWORD não são mais auto-descritivos, e um int não assinado não está mais de acordo com o princípio de menos surpresas, mas eles preservam a funcionalidade de muitos programas.

Acho que as palavras ou palavras nunca mudarão.
 96
Author: Windows programmer, 2010-06-08 07:39:11

Os programadores SDK preferem definir os seus próprios tipos usando o typedef. Isso permite alterar os tipos subjacentes apenas em um lugar, sem alterar todo o código do cliente. É importante seguir esta convenção. É improvável que o DWORD seja alterado, mas tipos como DWORD_PTR são diferentes em diferentes plataformas, como Win32 e x64. Então, se alguma função tem parâmetro DWORD, use DWORD e não unsigned int, e seu código será compilado em todas as versões futuras do Windows headers.

 13
Author: Alex F, 2018-08-17 22:39:25
Para mim, presumo que o int não assinado seja específico da plataforma. Inteiros podem ser 8 bits, 16 bits, 32 bits ou até 64 bits.

DWORD por outro lado, especifica o seu próprio tamanho, Que é palavra dupla. As palavras são 16 bits por isso o DWORD será conhecido como 32 bits em toda a plataforma

 9
Author: YeenFei, 2010-06-08 06:47:06