2

我正在编译我的第一个启用 64 位支持的项目。我遇到了一堆关于将隐式转换为浮点数的编译器警告。发生这种情况是因为我正在使用 fabsf() 并将结果分配给 CGFloat (这是一个双精度,而不是在新的 64 位架构上浮动)。

根据这个问题的答案:

基于 CGFloat 的数学函数?

我只需要#include <tgmath.h>解决这个问题并可能更改fabsffabs. 我至少有一个文件似乎没有帮助。我仍然收到警告:implicit conversion loses floating-point precision 'double' to 'CGFloat' aka (float). 这是生成该警告的行:

CGFloat deltaX = fabs(item.center.x-point.x);

有没有其他人遇到过这个?你是怎么解决的?我宁愿不禁用这个警告,也不想用大量的类型转换乱扔我的代码。

4

2 回答 2

3

我猜,您使用的是 CGPoint 类型,因此转换不会发生在 fabs(DOUBLE -> FLOAT) 中,而是在分配 CGFloat = DOUBLE 时发生。这可能是因为编译器使用了 math.h 中的 fabs,它对双精度数进行操作。

math.h 的问题在于它是由 OSX 标头在内部导入的(如果我没记错的话是碳),所以我猜一些 iOS 标头也可能这样做。快速查看后,似乎基本框架集没有导入 math.h,因此您可能应该寻找它是手动导入的。如果它是由某些系统库在内部导入的,您可能无法在单个实现文件中使用这些库和 tgmath。

如果你想检查是否有一些 math.h 依赖项,你可以使用一个肮脏的技巧来防止它被包含 - 将此行添加到文件中(或者在前缀文件的顶部更好):

#define __MATH_H__
于 2014-03-08T10:24:17.963 回答
1

tgmath.h通过在我的 PCH 文件顶部包含标题,我能够使这些功能正常工作。

在某些时候(阅读:Xcode 更新),我必须开始禁用模块才能使其正常工作。此类的详细信息在Dima 链接到下面的问题中。

于 2014-03-09T04:45:55.530 回答