Zastąpienie `fabs`,` fmax` itp. Do użytku z CGFloat na 64-bitowych urządzeniach z systemem iOS
Rozważ taki kod układu:
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;
W jaki sposób trzecia linia powinna zostać przepisana przy pomocy 64-bitowych urządzeń iOS?
(Obecny kod nie bierze pod uwagę, czyyCoordinateOfSomeOtherView
jestfloat
lub adouble
.)
Kilka opcji (nie jestem pewien, co jest najlepsze):
1. Zdefiniuj moje własne makro#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Mogłem wtedy wymienićfmax
zcgfmax
.
tgmath.h
Ta odpowiedź przepełnienia stosu od 2011 sugeruje zastąpieniemath.h
ztgmath.h
. Zastępuje to implementacjęfmax
z jednym, który dzwoni__typeof__
w każdym argumencie i wraca równieżfmax
lubfmaxf
w zależności od typów argumentów.
Ponieważ CGFloats odnoszą się do układu, utrata danych potencjalnie poniesiona podczas przechowywaniafloat
w adouble
zazwyczaj będzie nieistotny. Oznacza to, że będą reprezentować maleńkie ułamki pikseli.
Szukam innych opcji lub przydatnych porad od kogoś, kto wcześniej dokonał przejścia od 32 do 64 bitów.