Ios 逻辑| |与常量操作数的使用
我有几个这样的定义:Ios 逻辑| |与常量操作数的使用,ios,xcode,cocoa,cocoa-touch,Ios,Xcode,Cocoa,Cocoa Touch,我有几个这样的定义: #define flag YES #define prod YES #define test NO 这些用于测试 在代码的某一点上 BOOL testMode = flag || prod || test; Xcode发出这样的信息:使用逻辑| |和常量操作数。。。按位修复它 但我所做的操作是逻辑的,不是按位的 如果三个状态中有一个是YES,我希望testMode是YES 有什么线索吗?以下代码在没有警告的情况下得到相同的结果 BOOL testMode =
#define flag YES
#define prod YES
#define test NO
这些用于测试
在代码的某一点上
BOOL testMode = flag || prod || test;
Xcode发出这样的信息:使用逻辑| |和常量操作数。。。按位修复它
但我所做的操作是逻辑的,不是按位的
如果三个状态中有一个是YES,我希望testMode是YES
有什么线索吗?以下代码在没有警告的情况下得到相同的结果
BOOL testMode = flag | prod | test;
这可能是一个什么会让你更烦恼的问题。。。一个不必要的警告或使用按位
|
运算符进行本质上是逻辑操作的操作。该警告似乎是为了捕捉错误使用带有位字段的逻辑运算符的用户。当您试图设置位2时,您不会希望意外写入位字段| | 0x4
。我更喜欢这个:
BOOL testMode = (BOOL)flag || (BOOL)prod || (BOOL)test;
警告与以下内容无关:
#define flag true
#define prod true
#define test false
它认为你做错了什么,想“帮助”你。这是一个令人惊讶的警告。我无法通过将您的代码粘贴到源文件中来复制。@danh是的,我使用了相同的代码,但没有收到任何警告。.我能够复制它。。。似乎可以用
booltestmode=flag | prod | test
并在没有警告的情况下获得相同的结果。这可能是一个什么会让你更烦恼的问题。。。一个不必要的警告,或者使用按位|
运算符进行本质上的逻辑操作。它似乎是为了发现人们错误地使用带有位字段的逻辑运算符。当您试图设置位2时,您不会希望意外写入位字段| | 0x4
。是的,编译器确实无法区分是、否和0x7341之间的区别——它们只是数值。因此,它猜测您试图执行某种位设置/屏蔽操作,并且错误地使用了“逻辑”运算符。最佳解决方案,因为它适用于任何情况。但是,不是bool
也不是bool
?