Почему в 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 бит на всей платформе

Другие вопросы по тегам