Замена на `fabs`,` fmax` и т. Д. Для использования с CGFloat на 64-битных устройствах iOS
Рассмотрим код компоновки следующим образом:
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
.
tgmath.h
Ответ на переполнение стека с 2011 года предлагает заменитьmath.h
с участиемtgmath.h
, Это заменяет реализациюfmax
с тем, который звонит__typeof__
на каждый аргумент и возвращает либоfmax
или жеfmaxf
в зависимости от типа аргумента.
Поскольку CGFloats относятся к макету, потеря данных может бытьfloat
вdouble
обычно будет незначительным. То есть они будут представлять крошечные доли пикселей.
Я ищу любые другие варианты или полезные советы от кого-то, кто ранее делал переход от 32-битной к 64-битной версии.