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

StackOverflow https://stackoverflow.com/questions/2995251

  •  24-10-2019
  •  | 
  •  

Вопрос

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

Я не боюсь признать, что я что -то вроде новичка 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 бит по всей платформе

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top