Почему в C++ мы используем DWORD, а не unsigned int?
Я не боюсь признать, что я новичок в C++, так что это может показаться глупым вопросом, но...
Я вижу, что DWORD используется повсеместно в примерах кода. Когда я смотрю, что на самом деле означает DWORD, это, по-видимому, просто беззнаковое целое число (от 0 до 4 294 967 295). Итак, мой вопрос, почему у нас есть DWORD? Что это дает нам, что целочисленный тип "unsigned int" не дает? Это как-то связано с мобильностью и машинными различиями?
4 ответа
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 бита, а типовое число без знака int компилятора было 16 бит.
Когда Windows NT работала в 32-разрядном режиме, слово Intel 80386 было 32-разрядным, Microsoft WORD - 16-разрядным, Microsoft DWORD - 32-разрядным, а типовое число без знака int компилятора было 32-разрядным. Имена WORD и DWORD больше не были самоописательными, но они сохраняли функциональность программ Microsoft.
Когда Windows работает в 64-битном режиме, слово Intel - 64 бита, Microsoft WORD - 16 бит, Microsoft DWORD - 32 бита, а типовое число без знака int компилятора - 32 бита. Имена WORD и DWORD больше не являются самоописательными, а неподписанные целые числа больше не соответствуют принципу наименьших неожиданностей, но они сохраняют функциональность многих программ.
Я не думаю, что СЛОВО или DWORD когда-либо изменятся.
Разработчики SDK предпочитают определять свои собственные типы, используя typedef. Это позволяет изменять базовые типы только в одном месте, без изменения всего клиентского кода. Важно следовать этой конвенции. DWORD вряд ли будет изменен, но типы, такие как DWORD_PTR, отличаются на разных платформах, таких как Win32 и x64. Итак, если какая-то функция имеет параметр DWORD, используйте DWORD, а не unsigned int, и ваш код будет скомпилирован во всех будущих версиях заголовков Windows.
Для себя я бы предположил, что unsigned int зависит от платформы. Целое число может быть 8 бит, 16 бит, 32 бита или даже 64 бита.
DWORD, с другой стороны, указывает свой собственный размер, который является Double Word. Слово 16 бит, поэтому DWORD будет известен как 32 бит на всей платформе