0

次のように定義された列挙型が与えられた場合:

enum DebugModeType {
    DebugModeNone = 0,
    DebugModeButton = 1,
    DebugModeFPS = 2,
    DebugModeData = 4
};
#define DebugMode DebugModeButton|DebugModeData

DebugMode&DebugModeFPSの値は0 であると予想していますが、 1 であることがわかります。

4

1 に答える 1

4

演算子の優先順位を克服するには、マクロに括弧が必要です。

#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

于 2012-09-02T07:49:53.753 に答える