我正在编译我的第一个项目并启用 64 位支持。我遇到了一堆关于隐式转换为浮点数的编译器警告。发生这种情况是因为我使用 fabsf() 并将结果分配给 CGFloat(在新的 64 位架构上是双精度型,而不是浮点型)。
根据这个问题的回答:
基于 CGFloat 的数学函数? https://stackoverflow.com/questions/5352457/cgfloat-based-math-functions
我只需要#include <tgmath.h>
解决这个问题并可能改变fabsf
to fabs
。我至少有一个文件,这似乎没有帮助。我仍然收到警告:implicit conversion loses floating-point precision 'double' to 'CGFloat' aka (float).
这是生成该警告的行:
CGFloat deltaX = fabs(item.center.x-point.x);
还有其他人遇到过这个吗?你是怎么解决的?我不想禁用此警告或在我的代码中添加大量类型转换。
我猜,您使用的是 CGPoint 类型,因此转换不会发生在 fabs(DOUBLE -> FLOAT) 内,而是在赋值 CGFloat = DOUBLE 时发生。这可能是因为编译器使用了 math.h 中的 fabs,它对双精度数进行操作。
math.h 的问题是它是由 OSX 标头内部导入的(如果我没记错的话,是 Carbon),所以我猜某些 iOS 标头也可能会这样做。快速查看后,似乎基本的框架集没有导入 math.h,因此您可能应该寻找手动导入它。如果它是由某些系统库内部导入的,您可能无法在单个实现文件中使用这些库和 tgmath。
如果你想检查是否有一些 math.h 依赖项,你可以使用一个肮脏的技巧来防止它被包含 - 将此行添加到文件中(或者更好地添加到前缀文件顶部):
#define __MATH_H__
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)