Substituição para `fabs`,` fmax`, etc. para uso com CGFloat em dispositivos iOS de 64 bits
Considere o código do layout como este:
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;
Como a terceira linha deve ser reescrita com suporte para dispositivos iOS de 64 bits?
(O código atual não leva em consideração seyCoordinateOfSomeOtherView
é umfloat
ou umdouble
.)
Algumas opções (não sei qual é o melhor):
1. Defina minha própria macro#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Eu poderia então substituirfmax
comcgfmax
.
tgmath.h
Esta resposta de estouro de pilha a partir de 2011 sugere a substituiçãomath.h
comtgmath.h
. Isso substitui a implementação defmax
com um que chama__typeof__
em cada argumento e retornafmax
oufmaxf
dependendo dos tipos de argumento.
Visto que CGFloats se relacionam com o layout, a perda de dadosfloat
dentro dedouble
geralmente será insignificante. Ou seja, eles representarão pequenas frações de pixels.
Estou procurando outras opções ou conselhos úteis de alguém que tenha feito uma transição de 32 bits para 64 bits antes.