下面的宏定义是如何解析的?
#define EMAIL_SERVER_ADAPTER_FATAL_ERROR MSB_RETURN_TYPE_FATAL_ERROR | 1
我的意思是,它是解析为 1 还是解析为 MSB_RETURN_TYPE_FATAL_ERROR,为什么?
下面的宏定义是如何解析的?
#define EMAIL_SERVER_ADAPTER_FATAL_ERROR MSB_RETURN_TYPE_FATAL_ERROR | 1
我的意思是,它是解析为 1 还是解析为 MSB_RETURN_TYPE_FATAL_ERROR,为什么?
|
在宏中没有特殊含义。宏被解析为
MSB_RETURN_TYPE_FATAL_ERROR | 1
这是两个值(MSB_RETURN_TYPE_FATAL_ERROR 和 1)的按位或。
宏中的|
与 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 - 但原则仍然适用。
宏只是文本替换,所以
EMAIL_SERVER_ADAPTER_FATAL_ERROR
将被替换
MSB_RETURN_TYPE_FATAL_ERROR | 1
之后它只是数字(即普通的按位或运算)。