无序修改和访问参数

ign*_*rum 8 iphone objective-c ipad ios

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

double NSBKeyframeAnimationFunctionEaseInQuad(double t,double b, double c, double d)
{
    return c*(t/=d)*t + b;
}
Run Code Online (Sandbox Code Playgroud)

我已将我的Xcode更新为5.0,此项目中的每个方法都开始向我显示如下警告:"无序修改并访问't'".我应该将所有方法重写为objective-c还是有另一种方法可以摆脱所有这些警告?

Mar*_*n R 16

表达式的行为c*(t/=d)*t + b未定义的,您应该修复它,例如

t /= d;
return c*t*t + b;
Run Code Online (Sandbox Code Playgroud)

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


Piz*_*ola 5

那些警告可以被禁用

在触发警告的代码之前放这个

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunsequenced"
Run Code Online (Sandbox Code Playgroud)

这个代码之后

#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 有时,您需要一个行代码,因为代码在宏中(使用__LINE__),并且没有其他解决方案.有时你需要一行,因为它在语义上很短,所以你可以专注于实际操作,而不是文本本身.这就是为什么人们使用x ++而不是x = x + 1来消耗更多"大脑时间"进行解析的原因. (2认同)