给定一个像这样定义的枚举:
enum DebugModeType {
DebugModeNone = 0,
DebugModeButton = 1,
DebugModeFPS = 2,
DebugModeData = 4
};
#define DebugMode DebugModeButton|DebugModeData
我预计 的值为DebugMode&DebugModeFPS
0,但我观察到它为 1。
给定一个像这样定义的枚举:
enum DebugModeType {
DebugModeNone = 0,
DebugModeButton = 1,
DebugModeFPS = 2,
DebugModeData = 4
};
#define DebugMode DebugModeButton|DebugModeData
我预计 的值为DebugMode&DebugModeFPS
0,但我观察到它为 1。
您需要在宏中使用括号来克服运算符优先级:
#define DebugMode (DebugModeButton|DebugModeData)
原样:
DebugMode & DebugModeFPS
=DebugModeButton | DebugModeData & DebugModeFPS
(被解析为DebugModeButton | (DebugModeData & DebugModeFPS)
)
=DebugModeButton | (4 & 2)
=DebugModeButton | 0
=DebugModeButton
=1
我建议用括号:
=(DebugModeButton | DebugModeData) & DebugModeFPS
=5 & DebugModeFPS
=5 & 2
=0