Por que em C++ usamos DWORD em vez de int sem sinal? [duplicado]
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?
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.
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.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.
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