Как используя ifdef узнать, что объявлен тип DWORD_PTR?


Memsize-типы DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR и ULONG_PTR предназначены для поддержки 64-битного кода и способны безопасно хранить в себе указатель в независимости от разрядности платформы. Однако в старых версиях Windows Platform SDK данные типы могут отсутствовать. Наилучшим решением данной проблемы будет обновление SDK до последней версии, но если это по какой-то причине невозможно, то данные типы можно объявить самостоятельно.

В связи с тем, что данные типы объявлены с помощью спецификатора typedef, нет единого надёжного способа на этапе препроцессинга с помощью директивы #ifdef определить их присутствие в используемой версии SDK. Однако, максимальное значение для этих типов определено через MAXULONG_PTR в файле basetsd.h, поэтому можно поступить так:

#if !defined(MAXULONG_PTR)
typedef DWORD DWORD_PTR;
#endif

Библиографический список



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;



Найденные ошибки

Проверено проектов
346
Собрано ошибок
13 188

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;