在64位iPhone 5S中使用“FLT_EPSILON”

7

使用XCode 5构建我的项目时,我遇到了以下错误。

Use of undeclared identifier 'FLT_EPSILON'

我已经检查过了,在Xcode中FLT_EPSILON(它显示为褐色)在“float.h”文件中被定义。

我做错了什么?


下面是使用FLT_EPSILON的代码:

if (someTimeInterval < 0.03 - FLT_EPSILON) {
    someTimeInterval = 0.1;
}

我发现这是因为我试图在iPhone 5S模拟器(64位)上进行测试。

我不太理解在使用64位模拟器时的区别。 代替FLT_EPSILON应该包括什么-为什么它不能与64位一起使用?


你是否包含了 "float.h"? - user1118321
澄清一下,“float.h”是iOS SDK的一部分,所以我认为我不需要包含它。在Xcode 4上这个是正常工作的。 - GangstaGraham
有人弄清了吗?我不是很理解在使用64位模拟器时的区别。我应该包含什么而不是FLT_EPSILON - 为什么它在64位上不起作用? -> 有人弄清了吗? - Wirsing
我找到了一个解决方案,不过这个问题只出现在64位设备上有点奇怪。 - GangstaGraham
3个回答

3
解决方案是禁用项目中的模块。要这样做,请转到构建设置并将“启用模块”设置为“否”。
这是一个 clang 的 bug。模块(-fmodules 标志)仍然是实验性功能,当混合 Objective-C 和 C/C++ 模块时可能会出现一些错误。
请查看我在 Github 上的演示项目:TestEpsilon 第一个目标使用模块,第二个目标没有。为了确保我们得到“干净”的构建,在预构建脚本中添加了 DerivedData 和 ModulesCache 清理。

2
这对我有用:

这对我有用:

#ifndef FLT_EPSILON
    #define FLT_EPSILON __FLT_EPSILON__
#endif

(这是在float.h中定义的方式)

1
我不知道为什么这只适用于64位设备,但是以下是解决方案:

确保安装了MobileCoreServices.framework,然后它应该可以正常工作。

导入<MobileCoreServices/MobileCoreServices.h>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接