Есть ли кроссплатформенный способ определить, 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, но если у вас есть действительно хорошее современное решение, не стесняйтесь делиться!
Подход во время компиляции очень очевиден:
if (sizeof(ptrdiff_t) == sizeof(long))
или же
if (sizeof(ptrdiff_t) == sizeof(long long))
TMK, для этого нет переносимых определений. Однако это всего лишь незначительное препятствие. С помощью всего лишь небольшого количества сценариев любой тест во время компиляции такого типа может быть тривиально преобразован в тест на основе препроцессора с использованием стандартных инструментов, таких как Autoconf а также Automake. Это стандартные инструменты, используемые тысячами бесплатных библиотек и инструментов для этой конкретной цели.
Других решений пока нет …