使用'FLT_EPSILON'用于64位iPhone 5S

时间:2013-10-03 03:25:34

标签: objective-c cocoa-touch 64-bit ios7

尝试使用XCode 5构建项目时出现以下错误。

Use of undeclared identifier 'FLT_EPSILON'

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

我做错了什么?


这是使用FLT_EPSILON的代码:

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

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

我不太了解使用64位模拟器时的差异。 我应该包括什么而不是FLT_EPSILON - 为什么它不适用于64位?

3 个答案:

答案 0 :(得分:3)

解决方案是禁用项目中的模块。为此,请转到构建设置并将“启用模块”设置为“否”。

这是一个clang错误。模块(-fmodules标志)仍然是实验性功能,当您混合使用Objective-C和C / C ++模块时,可能会出现一些错误。

在github上查看我的演示项目:TestEpsilon

第一个目标使用模块,第二个目标没有。为了确保我们得到“干净”的构建,我在预构建脚本中添加了DerivedDataModulesCache清理。

答案 1 :(得分:2)

这对我有用:

#ifndef FLT_EPSILON
    #define FLT_EPSILON __FLT_EPSILON__
#endif

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

答案 2 :(得分:1)

我不知道为什么这对64位设备不起作用。

但这是解决方案:

  

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

     

导入<MobileCoreServices/MobileCoreServices.h>