如何解决以下宏定义?
#define EMAIL_SERVER_ADAPTER_FATAL_ERROR MSB_RETURN_TYPE_FATAL_ERROR | 1
我的意思是,它是解析为1还是MSB_RETURN_TYPE_FATAL_ERROR以及为什么?
答案 0 :(得分:15)
|
在宏中没有特殊含义。宏被解析为
MSB_RETURN_TYPE_FATAL_ERROR | 1
是两个值的按位OR(MSB_RETURN_TYPE_FATAL_ERROR和1)。
答案 1 :(得分:4)
宏中的|
与C和C ++中的其他地方具有相同的含义。它意味着按位或。
Presumable MSB_RETURN_TYPE_FATAL_ERROR
是一些数值(否则它不会编译,相当多)。
为了论证,我们将其设为0x100
以下代码:
return EMAIL_SERVER_ADAPTER_FATAL_ERROR;
将扩展为:
return MSB_RETURN_TYPE_FATAL_ERROR | 1;
反过来变成:
return 0x100 | 1;
又与:
相同 return 0x101;
当然MSB_RETURN_TYPE_FATAL_ERROR可能不是0x100 - 但原则仍然适用。
答案 2 :(得分:1)
宏只是文本替换,所以
EMAIL_SERVER_ADAPTER_FATAL_ERROR
将取代
MSB_RETURN_TYPE_FATAL_ERROR | 1
之后它只是数字(即普通的逐位OR运算)。