Reputation: 1478
Given an enumeration defined like so:
enum DebugModeType {
DebugModeNone = 0,
DebugModeButton = 1,
DebugModeFPS = 2,
DebugModeData = 4
};
#define DebugMode DebugModeButton|DebugModeData
I expect the value of DebugMode&DebugModeFPS
to be 0, but I observe it to be 1.
Upvotes: 0
Views: 92
Reputation: 3386
You need parentheses in your macro to overcome operator precedence:
#define DebugMode (DebugModeButton|DebugModeData)
As-is:
DebugMode & DebugModeFPS
= DebugModeButton | DebugModeData & DebugModeFPS
(which is parsed as DebugModeButton | (DebugModeData & DebugModeFPS)
)
= DebugModeButton | (4 & 2)
= DebugModeButton | 0
= DebugModeButton
= 1
With parentheses as I suggest:
= (DebugModeButton | DebugModeData) & DebugModeFPS
= 5 & DebugModeFPS
= 5 & 2
= 0
Upvotes: 4