replace“fabs”,“fmax”等以便在64位iOS设备上使用CGFloat
题
考虑这样的布局代码:
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.定义我自己的macros
#if defined(__LP64__) && __LP64__ #define cgfmax(x,y) fmaxf(x,y) #else #define cgfmax(x,y) fmax(x,y) #endif
我可以用cgfmax
代替fmax
。
2.使用tgmath.h
这个从2011年的堆栈溢出答案build议用tgmath.h
replacetgmath.h
这将用一个对每个参数调用__typeof__
函数replacefmax
的实现,并根据参数types返回fmax
或fmaxf
。
3.忽略这个问题
由于CGFloats与布局相关,因此将float
存储为float
的数据丢失通常是微不足道的。 也就是说,它们将代表极小的像素分数。
概要
我正在寻找任何其他选项或从以前做过32位到64位转换的人的有用build议。
将float
转换为double
时永远不会有任何“数据丢失”。 这个转换总是准确的。
你的解决scheme1和2在语义上是完全等价的,尽pipe(2)在风格上更为正确。
你的解决scheme3在forms上是不相同的。 它可能会导致float和double之间的额外转换,这可能会使效率稍微降低(但实际结果是相同的)。
基本上没关系,而是用tgmath
。