TLDR:如何以编译 32 位和 64 位 CGFloats 且不发出警告的方式调用标准浮点代码?
CGFloat 定义为 double 或 float,具体取决于编译器设置和平台。我正在尝试编写在这两种情况下都能正常工作的代码,而不会生成大量警告。
当我使用诸如下限、绝对值、上限和其他简单浮点运算之类的函数时,我会收到有关值被截断的警告。例如:
警告:隐式转换将 64 位值缩短为 32 位值
我不担心计算的正确性或精度损失,因为我意识到我可以一直使用所有函数的双精度版本(floor 而不是 Floorf 等);然而,我不得不容忍这些错误。
有没有一种方法可以干净地编写支持 32 位和 64 位浮点的代码,而不必使用大量 #ifdef __ LP64 __ ,或为所有标准浮点函数编写包装函数?
您可以使用这些功能tgmath.h.
#include <tgmath.h>
...
double d = 1.5;
double e = floor(d); // will choose the 64-bit version of 'floor'
float f = 1.5f;
float g = floor(f); // will choose the 32-bit version of 'floorf'.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)