8

我正在为我的项目中的一些动画使用开源项目(NSBKeyframeAnimation)。以下是我正在使用的方法示例:

double NSBKeyframeAnimationFunctionEaseInQuad(double t,double b, double c, double d)
{
    return c*(t/=d)*t + b;
}

我已将我的 Xcode 更新到 5.0,并且该项目中的每个方法都开始向我显示如下警告:“Unsequenced modify and access to 't'”。我应该将所有方法重写为objective-c,还是有另一种方法来消除所有这些警告?

4

2 回答 2

16

表达式的行为c*(t/=d)*t + bundefined,你应该修复它,例如

t /= d;
return c*t*t + b;

有关详细说明,请参见例如未定义的行为和序列点

于 2013-09-10T22:01:30.833 回答
5

可以禁用这些警告

把它放在触发警告的代码之前

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunsequenced"

在那之后的代码

#pragma clang diagnostic pop

然而,没有什么能保证编译器总是能优雅地处理这种情况。我来到这个页面是因为我在完全相同的源文件中收到了 50 个警告。

我很感激这些功能,但程序员应该意识到,试图在一行上写所有东西是非常“1980 年代”的,当时编译器还没有像今天那样优化。

当赢得几个处理器周期实际上很重要时,我们只有几百万,而不是我们现在拥有的数十亿。

我总是把可读性放在第一位。

于 2013-10-07T14:33:02.217 回答