Кроссплатформенная версия __PTRDIFF_TYPE__

Есть ли кроссплатформенный способ определить, ptrdiff_t такой же как long или же long long во время предварительной обработки?

я знаю __PTRDIFF_TYPE__ должен давать тип с помощью gcc / g ++, но он не определен в VC / VC ++ для Windows. Есть ли лучший подход, чем следующий?

#ifndef __PTRDIFF_TYPE__
# if _WIN64
#  define __PTRDIFF_TYPE__ long long
# else
#  define __PTRDIFF_TYPE__ long
# endif
#endif

Если это невозможно во время предварительной обработки, есть ли подход времени компиляции? Я ищу решение не на C ++ 11, но если у вас есть действительно хорошее современное решение, не стесняйтесь делиться!

0

Решение

Подход во время компиляции очень очевиден:

if (sizeof(ptrdiff_t) == sizeof(long))

или же

if (sizeof(ptrdiff_t) == sizeof(long long))

TMK, для этого нет переносимых определений. Однако это всего лишь незначительное препятствие. С помощью всего лишь небольшого количества сценариев любой тест во время компиляции такого типа может быть тривиально преобразован в тест на основе препроцессора с использованием стандартных инструментов, таких как Autoconf а также Automake. Это стандартные инструменты, используемые тысячами бесплатных библиотек и инструментов для этой конкретной цели.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]