逻辑运算符和按位运算符警告混淆 - iOS



我有一个 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
我认为

应该是

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

如果您在shouldAutoRotateToInterfaceOrientation内部使用它,因为您要将常量值与IS_WIDESCREEN进行比较

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

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

相关内容

最新更新