我正在编译我的第一个启用了64位支持的项目。我遇到了一堆关于隐式转换浮动的编译器警告。发生这种情况是因为我正在使用fabsf()并将结果分配给CGFloat(这是一个双重的,而不是新的64位架构上的浮点数。)
根据这个问题的答案:
我只需要#include <tgmath.h>
来解决此问题,并可能将fabsf
更改为fabs
。我至少有一个文件,这似乎没有帮助。我仍然收到警告:implicit conversion loses floating-point precision 'double' to 'CGFloat' aka (float).
以下是生成该警告的行:
CGFloat deltaX = fabs(item.center.x-point.x);
有没有其他人遇到这个?你是怎么解决的?我宁愿不要禁用这个警告,也不要把我的代码乱扔垃圾。
答案 0 :(得分:3)
我想,你使用的是CGPoint类型,因此转换不会发生在fabs(DOUBLE - &gt; FLOAT)中,但是在赋值时CGFloat = DOUBLE。这可能是因为编译器使用的是来自math.h的fab,它使用双打。
math.h的问题在于它是由OSX标头内部导入的(如果我没记错的话,是碳),所以我猜一些iOS标题也可能会这样做。快速查看后,似乎基本的框架集不会导入math.h,因此您可能应该查找它是手动导入的。如果它是由某些系统库内部导入的,您可能无法在单个实现文件中使用这些库和tgmath。
如果你想检查是否有一些math.h依赖项,你可以使用脏技巧来防止它被包含 - 将这一行添加到文件中(或者更好地在前缀文件之上):
#define __MATH_H__
答案 1 :(得分:1)
我能够通过在我的PCH文件顶部包含标题来使tgmath.h
函数正常工作。
在某些时候(阅读:Xcode更新)我不得不开始禁用模块以使其工作。有关详细信息,请参阅下面的question Dima链接。