﻿# Как используя 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, поэтому можно поступить так:

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

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

1. Обсуждение на сайте Stackoverflow\.com\. "[How to detect if the Windows DWORD\_PTR type is supported, using an ifdef?](https://stackoverflow.com/questions/2723284/how-to-detect-if-the-windows-dword-ptr-type-is-supported-using-an-ifdef)"
1. MSDN Library\. [error C2065: 'DWORD\_PTR' : undeclared identifier](https://social.msdn.microsoft.com/Forums/vstudio/en-US/4929a05f-741f-4cb1-8b34-728e3611d054/error-c2065-dwordptr-undeclared-identifier?forum=vcgeneral)\.