Почему в C++ мы используем DWORD, а не неподписанный интервал? [дубликат]

Этот вопрос уже имеет ответ здесь:

Я не боюсь признать, что я - своего рода новичок C++, таким образом, это могло бы походить на глупый вопрос, но....

Я вижу DWORD, используемую повсеместно в примерах кода. Когда я ищу то, что DWORD действительно означает, его, по-видимому, просто неподписанный интервал (от 0 до 4,294,967,295). Таким образом, мой вопрос затем, почему у нас есть DWORD? Что это дает нам, которых не делает целочисленный тип 'неподписанный интервал'? Это имеет некоторое отношение к мобильности и различиям в машине?

115
задан academicRobot 8 June 2010 в 07:26
поделиться

4 ответа

DWORD не является типом C ++, он определен в .

Причина в том, что DWORD имеет определенный диапазон и формат, на который полагаются функции Windows, поэтому, если вам требуется этот конкретный диапазон, используйте этот тип. (Или, как они говорят: «Находясь в Риме, делайте, как римляне».) Для вас это соответствует unsigned int , но это может быть не всегда так. На всякий случай используйте DWORD , когда ожидается DWORD , независимо от того, каким оно может быть на самом деле.

Например, если они когда-либо изменили диапазон или формат unsigned int , они могли бы использовать другой тип для DWORD , чтобы сохранить те же требования, и весь код, использующий ] DWORD было бы непонятно. (Точно так же они могли решить, что DWORD должен быть unsigned long long , изменить его, и весь код, использующий DWORD , будет неразумным.)


Также обратите внимание, что unsigned int не обязательно имеет диапазон от 0 до 4 294 967 295. См. здесь .

150
ответ дан 24 November 2019 в 02:23
поделиться

Для себя я бы предположил, что unsigned int зависит от платформы. Integer может быть 8 бит, 16 бит, 32 бита или даже 64 бита.

DWORD, с другой стороны, определяет свой собственный размер, который является двойным словом. Слово состоит из 16 бит, поэтому DWORD будет известен как 32-битный на всех платформах

7
ответ дан 24 November 2019 в 02:23
поделиться

Разработчики SDK предпочитают определять свои собственные типы с помощью typedef. Это позволяет изменять базовые типы только в одном месте без изменения всего клиентского кода. Важно соблюдать это соглашение. DWORD вряд ли будет изменен, но такие типы, как DWORD_PTR, различаются на разных платформах, например Win32 и x64. Итак, если какая-то функция имеет параметр DWORD, используйте DWORD, а не unsigned int, и ваш код будет скомпилирован во всех будущих версиях заголовков Windows.

12
ответ дан 24 November 2019 в 02:23
поделиться

Когда 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 когда-либо изменятся.

91
ответ дан 24 November 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: