我有以下code.if我给control_word为6为什么如果条件评估为真并进入内部if块?这究竟发生了什么?
#define MACRO1 0x01
#define MACRO2 0x02
#define MACRO4 0x04
#define MACRO3 MACRO1 | MACRO2
#define MACRO7 MACRO4 | MACRO3
int main()
{
if(control_word == MACRO3 || control_word == MACRO7)
{
/*DO SOME OPERATION*/
}
else
{
/*DO SOMETHING ELSE */
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
|的优先级 和==运算符不是你认为的那样.道德:总是把你的宏括起来!
#define MACRO3 (MACRO1 | MACRO2)
#define MACRO7 (MACRO4 | MACRO3)
Run Code Online (Sandbox Code Playgroud)
那么表达式会扩展到
control_word == 0x01 | 0x02 || control_word == 0x01 | 0x02 | 0x04
Run Code Online (Sandbox Code Playgroud)
反过来形成
(control_word == 1) | 2 || (control_word == 7) | 6)
Run Code Online (Sandbox Code Playgroud)
那是
0 | 2 || 0 | 6
Run Code Online (Sandbox Code Playgroud)
总而言之
2 || 6
Run Code Online (Sandbox Code Playgroud)
由C解释为"真或假",并且产生真实.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |