Почему в C ++ мы используем DWORD, а не Unsigned Int? [дублировать
Вопрос
Этот вопрос уже имеет ответ здесь:
Я не боюсь признать, что я что -то вроде новичка C ++, так что это может показаться глупым вопросом, но ....
Я вижу, что DWORD используется повсюду в примерах кода. Когда я смотрю, что действительно означает DWORD, это, очевидно, просто без подписного INT (от 0 до 4294 967 295). Итак, мой вопрос: почему у нас есть dword? Что это дает нам, что интегральный тип 'unsigned int' нет? Имеет ли это какое -то отношение к портативности и различиям в машинах?
Решение
DWORD
не является типом C ++, он определен в <windows.h>
.
Причина в том, что DWORD
Имеет определенный диапазон и формат функций Windows, на которые полагаются, поэтому, если вам требуется этот конкретный диапазон, используйте этот тип. (Или, как они говорят: «Когда в Риме делай, как это делают римляне».) Для вас это соответствует unsigned int
, но это не всегда так. Чтобы быть в безопасности, использовать DWORD
когда DWORD
Ожидается, независимо от того, что это может быть на самом деле.
Например, если они когда -либо изменили диапазон или формат unsigned int
Они могли бы использовать другой тип для вхождения DWORD
Чтобы сохранить те же требования, и весь код с использованием DWORD
было бы не мудрым. (Точно так же они могут решить DWORD
должно быть unsigned long long
, изменить и весь код, используя DWORD
было бы не мудрым.)
Также примечание unsigned int
делает нет необходимо иметь диапазон от 0 до 4 294 967 295. Видеть здесь.
Другие советы
Когда MS-DOS и Windows 3.1 работали в 16-битном режиме, слово Intel 8086 составило 16 бит, Microsoft Word составляло 16 бит, Microsoft Dword составляло 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 бита, Microsoft Word составляет 16 битов, Microsoft Dword составляет 32 бита, а типичный UNSIGNED Compiler INT-32 бита. Имена Word и DWORD больше не являются самоопределенными, и Unsigned Int больше не соответствует принципу наименьших сюрпризов, но они сохраняют функциональность многих программ.
Я не думаю, что слово или dword когда -либо изменится.
Разработчики SDK предпочитают определять свои собственные типы, используя Typedef. Это позволяет изменять основные типы только в одном месте, не изменяя весь клиент -код. Важно следовать этой конвенции. DWORD вряд ли будет изменена, но такие типы, как dword_ptr, разные на разных платформах, таких как Win32 и X64. Таким образом, если у какой -то функции есть параметр dword, используйте DWORD, а не Unsigned Int, и ваш код будет составлен во всех будущих версиях заголовков Windows.
Для себя я бы предположил, что Unsigned Int имеет платформу. Целое число может составлять 8 битов, 16 бит, 32 бита или даже 64 бит.
DWORD, с другой стороны, указывает свой собственный размер, который является двойным словом. Слово - 16 бит, поэтому dword будет известен как 32 бит по всей платформе