2

下面的宏定义是如何解析的?

#define EMAIL_SERVER_ADAPTER_FATAL_ERROR     MSB_RETURN_TYPE_FATAL_ERROR | 1

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

4

3 回答 3

15

|在宏中没有特殊含义。宏被解析为

MSB_RETURN_TYPE_FATAL_ERROR | 1

这是两个值(MSB_RETURN_TYPE_FATAL_ERROR 和 1)的按位或。

于 2013-05-24T12:42:44.123 回答
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 - 但原则仍然适用。

于 2013-05-24T12:44:45.730 回答
1

宏只是文本替换,所以

EMAIL_SERVER_ADAPTER_FATAL_ERROR 

将被替换

MSB_RETURN_TYPE_FATAL_ERROR | 1

之后它只是数字(即普通的按位或运算)。

于 2013-05-24T12:43:09.110 回答