请问它们的区别?
#if (CUSTOMERIZATION==AAA | CUSTOMERIZATION==BBB)
#if (CUSTOMERIZATION==AAA || CUSTOMERIZATION==BBB)
请问以上二句, 它们的区别?
想实现 或功能 #if ((CUSTOMERIZATION==AAA) or (CUSTOMERIZATION==BBB))
应哪个正确呢?
[解决办法]
个人觉得宏定义应该这样:
#if(CUSTOMERIZATION==AAA
[解决办法]
CUSTOMERIZATION==BBB)
但是按照它这样,编译器也可以成功识别,因为有如下情况:
int i = 1;
int k = 0;
int j = i
[解决办法]
k;//只有都为0时,结果才为0
int s = i
[解决办法]
k;//或也刚好是这样,只有两者都是0时结果才为0
//所以在判断上,1和其它非0值结果都是一样。
[解决办法]
如果AAA是5这样的宏的话,那么就没问题
见
http://gcc.gnu.org/onlinedocs/cpp/If.html#If
if只能处理算术表达式来着
至于
[解决办法]
还是
[解决办法]
,逻辑上说,是
[解决办法]
,只是
[解决办法]
恰好也对
因为==产生1或者0
对于1和0来说,
[解决办法]
和
[解决办法]
的结果刚好一样,即
0
[解决办法]
0 == 0
[解决办法]
0
0
[解决办法]
1 == 0
[解决办法]
1
1
[解决办法]
0 == 1
[解决办法]
0
1
[解决办法]
1 == 1
[解决办法]
1
但逻辑不一样,一个是bit与,一个是逻辑与。
[解决办法]
个人意见:最大的区别在于
[解决办法]
不会逻辑短路,
[解决办法]
会逻辑短路
但也许是作者笔误