【问题标题】:fabs() does not work under modulesfabs() 在模块下不起作用
【发布时间】:2013-10-27 21:59:50
【问题描述】:

我在 appStore 上有较旧的应用程序。我想为 iOS 7 更新它,所以我在 Xcode 5 下打开它,并在 Build Settings 下打开了 Objective-c 模块。没有它,编译会很慢。

但这会导致 fabs() 函数出现问题,我在 *-Prefix.pch 文件中定义的一个 makro 中使用了该函数:

#define IS_IPHONE_5 (fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON)

当我调用这个 makro 时,它会导致错误感谢 fabs() 函数:

错误:被调用的对象类型“int”不是函数或函数指针
警告:函数“__tg_promote1”的隐式声明在 C99 中无效
警告:函数“__tg_fabs”的隐式声明在 C99 中无效

当我关闭模块时,一切正常。

有什么帮助吗?我对此感到绝望。 谢谢。

【问题讨论】:

  • 我刚才在我的项目中定义了这个宏,并在一些示例代码中使用了它。这个对我有用。你能提供更多信息来重现问题吗?我在 Mac OSX 10.9 和 Xcode 5 上。

标签: ios objective-c


【解决方案1】:
  • CGRect 是 { CGPoint, CGSize }。 CGSize 是 { CGFloat, CGFloat }。 CGFloat 是浮点数的 typedef,而不是双精度数。

  • fabs 被声明为extern double fabs(double)

将#define 更改为:

#define IS_IPHONE_5 (fabsf( [ [ UIScreen mainScreen ] bounds ].size.height - ( CGFloat )568.0 ) &lt; FLT_EPSILON)

【讨论】:

  • 有效!!!非常感谢!我必须更深入地看待这些事情。再次感谢!
  • 为什么不简单的568.0f 而不是丑陋的(CGFloat)568.0
  • 我认为两者都应该工作。但对我来说有趣的是,之前和模块都可以,但它不起作用。 (而且错误消息也没有帮助 - 至少对我而言)。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 2017-02-24
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多