Para que servem os tipos WORD e DWORD no C/C++?

Há um tempo, vejo no código fonte de vários programas, variáveis do tipo WORD e DWORD, eu até experimentei usá-las no C++, mas ainda não sei a utilidade.
Por isso a pergunta: Para que servem os tipos WORD e DWORD no C/C++?

Fique a vontade para detalhar…

Fuçando aqui, o DevCPP me levou até um cabeçalho que definia WORD como unsigned short e DWORD como unsigned long

Então significa que WORD armazenam números inteiros positivos e curtos e DWORD números inteiros positivos longos certo? Por que existe essa redefinição de tipo?

Então cara, WORD e DWORD são dois tipos de dados criados por um simples typedef, a única utilidade deles é simplesmente padronizar algumas funções que necessitam de uma faixa específica de valores.

Vou tentar exemplificar para ficar claro:

1) Imagine que você tenha uma API escrita em C ou C++;
2) Agora imagine que você tem algumas partes de sua API que necessita de trabalhar com tipos unsigned int;
3) Então sua API se torna forte no mercado e você percebe a necessidade de alterar o alcance destes valores que foram definidos como unsigned int para unsigned long long. Você vai ir mudando em cada parte da sua API? Seria muito trabalhoso.
4) Mas se você determinou um novo tipo para esses unsigned int com um typedef você mudará apenas em uma parte do seu código. Muito mais simples.

Desta forma você determina como será a faixa de valores que alguns métodos, classes ou funções que sua API devem trabalhar. Porém para chegar nesta conclusão que um tipo de dado deve ser criado apartir de um typedef é necessário pensar e repensar ou seja projetar o sistema ou a API antes de começar a escrever o código, se possível prever até mesmo o que sua API poderá fazer no futuro quando hardware estiver mais avançado

WORD e DWORD são tipos utilizados em programação com a WinApi ou seja API do Windows. A regra é, quando estiver trabalhando com alguma API específica, siga as regras desta API, dance conforme a música. Em programação de windows exitem tipos como WPARAM, LPARAM, DWORD, WORD, UINT, TCHAR, LPSTR, LPWSTR, LPCTSTR, eu não vou citar todos pois são muitos.

Se você quer trabalhar com segurança utilize os tipos de dados da API que estiver usando. Outro exemplo é a API OpenGL nela são definitos alguns tipos como GLint, GLfloat, GLshort já na API OpenCL existem cl_int, cl_char, cl_uchar e etc…

Na prática:
Se um método ou função retornar um DWORD tenha certeza que você tem uma variável do tipo DWORD para receber este dado. Isto lhe dará 100% de segurança. Não utilize um tipo unsigned long para receber um DWORD, mesmo DWORD sendo um typedef de unsigned long.

Se ainda houverem dúvidas por favor poste que tentaremos ajudar.

5 curtidas

Eu nunca vi muita finalidade para esse tal typedef mas agora eu entendi porque isso existe. Sua resposta vai ajudar muita gente que não pensa muito a nível de projeto e só pensa escrever código e mais código.

Boa resposta cara.

HDAVYS S sua resposta foi muito esclarecedora. Obrigado!