我有一个 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)interfaceOrientation 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)
永远不会为真。
因此,编译器会警告您,并暗示您可能正在尝试执行按位操作,检查特定位以查看是否已设置。