Вопрос
Рассмотрим код макета следующим образом:
CGFloat descriptionHeight = // height of a paragraph of text with zero or more words;
CGFloat imageHeight = // height of an image;
CGFloat yCoordinateOfSomeOtherView = fmax(descriptionHeight, imageHeight) + 5.0f;
Как следует переписать третью строку с поддержкой 64-разрядных iOS-устройств?
(В текущем коде не учитывается, является ли yCoordinateOfSomeOtherView
float
или double
.)
Функции
Несколько вариантов (я не уверен, что лучше):
1. Определите мой собственный макрос
#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Затем я мог бы заменить fmax
на cgfmax
.
2. Используйте tgmath.h
Этот ответ от 2011 года предполагает замену math.h
на tgmath.h
. Это заменяет реализацию fmax
тем, что вызывает __typeof__
для каждого аргумента и возвращает либо fmax
, либо fmaxf
в зависимости от типов аргументов.
3. Игнорировать эту проблему
Поскольку CGFloats относятся к компоновке, потеря данных, потенциально возникшая при хранении float
в double
, обычно будет незначительной. То есть они будут представлять собой небольшие доли пикселей.
Резюме
Я ищу любые другие варианты или полезные советы от того, кто раньше делал переход от 32 до 64 бит.