次のように定義された列挙型が与えられた場合:
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