问题
考虑这样的布局代码:
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
是 afloat
还是 a 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
This Stack Overflow answer from 2011 建议math.h
用tgmath.h
. 这将 的实现替换为fmax
调用__typeof__
每个参数并根据参数类型返回fmax
或返回的实现。fmaxf
3.忽略这个问题
由于 CGFloats 与布局有关,将 a 存储float
到 adouble
中可能导致的数据丢失通常是微不足道的。也就是说,它们将代表像素的一小部分。
概括
我正在寻找以前做过 32 位到 64 位转换的人的任何其他选项或有用的建议。