读书人

请教它们的区别

发布时间: 2014-01-01 18:12:08 作者: rapoo

请问它们的区别?
#if (CUSTOMERIZATION==AAA | CUSTOMERIZATION==BBB)

#if (CUSTOMERIZATION==AAA || CUSTOMERIZATION==BBB)

请问以上二句, 它们的区别?

想实现 或功能 #if ((CUSTOMERIZATION==AAA) or (CUSTOMERIZATION==BBB))

应哪个正确呢?
[解决办法]

引用:
别人的代码中有以下这样的情况,别人的用意是什么?

#if(CUSTOMERIZATION==AAA
[解决办法]
CUSTOMERIZATION==BBB)
typedef enum
{
TimeHour= 0,
TimeMin,
TimeAP,
TimeOK,
TimeCancle
}TypeTime;
TypeTime curTimeItem = TimeHour;
#else
typedef enum
{
TimeMin = 0,
TimeHour,
TimeAP,
TimeOK,
TimeCancle
}TypeTime;
TypeTime curTimeItem = TimeMin;
#endif


个人觉得宏定义应该这样:

#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与,一个是逻辑与。

[解决办法]
个人意见:最大的区别在于
[解决办法]
不会逻辑短路,
[解决办法]
会逻辑短路

但也许是作者笔误

读书人网 >C语言

热点推荐