【问题标题】:Logical and Bitwise Operators warning confusion - iOS逻辑和位运算符警告混淆 - iOS
【发布时间】:2012-10-11 22:03:20
【问题描述】:

我有一个 if else 语句,其中有 2 个完全正确的参数,但是第二个 if 给了我这个警告:

使用带有常量操作数的逻辑“&&”

使用的代码是:

else if ( !IS_WIDESCREEN && UIInterfaceOrientationPortrait) //No Warning or error
{

}
else if(IS_WIDESCREEN && UIInterfaceOrientationLandscapeRight) //Gives me the above warning
{

}

注意:IS_WIDESCREEN - 使用 iPhone 5 屏幕的测量值定义。

知道这是为什么吗?

///编辑:

添加了我如何定义 iPhone 5

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

整个事情都在这个方法里面:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfa‌​ceOrientation duration:(NSTimeInterval)duration

【问题讨论】:

  • 当您说它是用 iPhone 5 屏幕的测量值定义时,您的意思是它只是硬编码到那个尺寸还是它定义中的另一个逻辑检查?
  • 为你添加了代码,这样你就可以看到我做了什么
  • 这是在 shouldAutoRotateToInterfaceOrientation 方法中吗?
  • 是的 - 抱歉忘记提了

标签: ios if-statement operators bit-manipulation


【解决方案1】:

我觉得应该是的

else if ( !IS_WIDESCREEN && (interfaceOrientation == UIInterfaceOrientationPortrait)) {  
// ....
} else if(IS_WIDESCREEN && (interfaceOrientation == UIInterfaceOrientationLandscapeRight)) {  
// ....
} 

如果您在 shouldAutoRotateToInterfaceOrientation 中使用它,因为您将一个常量值与 IS_WIDESCREEN 进行比较

【讨论】:

  • 太棒了!当 SO 取消时间限制时我会接受:-)
【解决方案2】:

如果您在逻辑 &amp;&amp; 表达式中使用常量,则会收到警告,因为该常量无关紧要。想象一下常数是非负的。 if (x &amp;&amp; non-neg-constant) 的结果与if (x) 相同。同样,如果常数为零,if (x &amp;&amp; 0) 将永远不会为真。

因此,编译器会警告您,并暗示您可能正在尝试执行按位运算,检查特定位以查看它是否已设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多