Considérez le code de disposition comme ceci:
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;
Comment la troisième ligne doit-elle être réécrite avec la prise en charge des périphériques iOS 64 bits?
(Le code actuel ne prend pas en count si yCoordinateOfSomeOtherView
est un float
ou un double
.)
Quelques options (je ne suis pas sûr de ce qui est le mieux):
#if defined(__LP64__) && __LP64__ #define cgfmax(x,y) fmaxf(x,y) #else #define cgfmax(x,y) fmax(x,y) #endif
Je pourrais alors replace fmax
par cgfmax
.
tgmath.h
Cette réponse Stack Overflow de 2011 suggère de replace math.h
par tgmath.h
. Cela remplace l'implémentation de fmax
par celle qui appelle __typeof__
sur chaque argument et renvoie fmax
ou fmaxf
fonction des types d'arguments.
Puisque les CGFloats se rapportent à la layout, la perte de données potentiellement encourue en stockant un float
dans un double
sera généralement insignifiante. Autrement dit, ils représenteront de minuscules fractions de pixels.
Je cherche d'autres options ou des conseils utiles de quelqu'un qui a déjà fait une transition de 32 bits vers 64 bits.
Il n'y a jamais de perte de données lors de la conversion d'un float
en double
. Cette conversion est toujours exacte.
Vos solutions 1 et 2 sont entièrement sémantiquement équivalentes, bien que (2) soit plus correct sur le plan stylistique.
Votre solution 3 n'est formellement pas équivalente; cela peut entraîner des conversions supplémentaires entre float et double, ce qui peut le rendre légèrement less efficace (mais le résultat actuel est identique).
Fondamentalement, cela n'a pas d'importance, mais utilisez tgmath
.