Этот вопрос уже имеет ответ здесь:
Я не боюсь признать, что я - своего рода новичок C++, таким образом, это могло бы походить на глупый вопрос, но....
Я вижу DWORD, используемую повсеместно в примерах кода. Когда я ищу то, что DWORD действительно означает, его, по-видимому, просто неподписанный интервал (от 0 до 4,294,967,295). Таким образом, мой вопрос затем, почему у нас есть DWORD? Что это дает нам, которых не делает целочисленный тип 'неподписанный интервал'? Это имеет некоторое отношение к мобильности и различиям в машине?
DWORD
не является типом C ++, он определен в
.
Причина в том, что DWORD
имеет определенный диапазон и формат, на который полагаются функции Windows, поэтому, если вам требуется этот конкретный диапазон, используйте этот тип. (Или, как они говорят: «Находясь в Риме, делайте, как римляне».) Для вас это соответствует unsigned int
, но это может быть не всегда так. На всякий случай используйте DWORD
, когда ожидается DWORD
, независимо от того, каким оно может быть на самом деле.
Например, если они когда-либо изменили диапазон или формат unsigned int
, они могли бы использовать другой тип для DWORD
, чтобы сохранить те же требования, и весь код, использующий ] DWORD
было бы непонятно. (Точно так же они могли решить, что DWORD
должен быть unsigned long long
, изменить его, и весь код, использующий DWORD
, будет неразумным.)
Также обратите внимание, что unsigned int
не обязательно имеет диапазон от 0 до 4 294 967 295. См. здесь .
Для себя я бы предположил, что unsigned int зависит от платформы. Integer может быть 8 бит, 16 бит, 32 бита или даже 64 бита.
DWORD, с другой стороны, определяет свой собственный размер, который является двойным словом. Слово состоит из 16 бит, поэтому DWORD будет известен как 32-битный на всех платформах
Разработчики SDK предпочитают определять свои собственные типы с помощью typedef. Это позволяет изменять базовые типы только в одном месте без изменения всего клиентского кода. Важно соблюдать это соглашение. DWORD вряд ли будет изменен, но такие типы, как DWORD_PTR, различаются на разных платформах, например Win32 и x64. Итак, если какая-то функция имеет параметр DWORD, используйте DWORD, а не unsigned int, и ваш код будет скомпилирован во всех будущих версиях заголовков Windows.
Когда MS-DOS и Windows 3.1 работали в 16-битном режиме, слово Intel 8086 было 16 бит, WORD Microsoft - 16 бит, DWORD Microsoft - 32 бита, а типичный unsigned int компилятора - 16 бит.
Когда Windows NT работала в 32-битном режиме, слово Intel 80386 было 32 бита, Microsoft WORD - 16 бит, Microsoft DWORD - 32 бита, а типичный unsigned int компилятора - 32 бита. Названия WORD и DWORD больше не были самоописательными, но они сохранили функциональность программ Microsoft.
Когда Windows работает в 64-битном режиме, слово Intel имеет размер 64 бита, WORD Microsoft - 16 бит, DWORD Microsoft - 32 бита, а беззнаковый int типичного компилятора - 32 бита. Названия WORD и DWORD больше не являются самоописательными, а unsigned int больше не соответствует принципу наименьших неожиданностей, но они сохраняют функциональность многих программ.
Я не думаю, что WORD или DWORD когда-либо изменятся.