宏中的管道表示什么?

时间:2013-05-24 12:39:10

标签: c++

如何解决以下宏定义?

#define EMAIL_SERVER_ADAPTER_FATAL_ERROR     MSB_RETURN_TYPE_FATAL_ERROR | 1

我的意思是,它是解析为1还是MSB_RETURN_TYPE_FATAL_ERROR以及为什么?

3 个答案:

答案 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运算)。