无序修改和访问参数

时间:2013-09-10 21:48:54

标签: iphone ios objective-c ipad

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

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

我已将我的Xcode更新为5.0,此项目中的每个方法都开始向我显示如下警告: “无序修改和访问't'” 。我应该将所有方法重写为objective-c还是有另一种方法来消除所有这些警告?

2 个答案:

答案 0 :(得分:16)

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

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

有关详细说明,请参阅示例Undefined behavior and sequence points

答案 1 :(得分:5)

可以禁用这些警告

在触发警告的代码

之前加上这个
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunsequenced"

以及此代码之后

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

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

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

我总是先把可读性放在首位。