2012-09-02 298 views
0

給予枚舉定義,像這樣:意外的結果

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

我期待的DebugMode&DebugModeFPS值是0,但我看到它是1

回答

4

你需要在你的括號宏來克服運算符優先級:

#define DebugMode (DebugModeButton|DebugModeData) 

AS-是:

DebugMode & DebugModeFPS

= DebugModeButton | DebugModeData & DebugModeFPS

(其被分析爲DebugModeButton | (DebugModeData & DebugModeFPS)

= DebugModeButton | (4 & 2)

= DebugModeButton | 0

= DebugModeButton

= 1

用括號我建議:

= (DebugModeButton | DebugModeData) & DebugModeFPS

= 5 & DebugModeFPS

= 5 & 2

= 0

+0

尼斯。 #define DebugMode(DebugModeButton | DebugModeData)或#define DebugMode DebugModeButton + DebugModeData也適用。給它一個高度優先。非常感謝你。 – zszen

+1

更好的是,不要使用宏,使用常量,並避免這種許多其他宏陷阱。 –

+0

@zszen我建議不要使用+運算符,因爲如果你已經設置了一些位標誌,你最終會取消它的設置並且無意中設置其他標誌。 – Richard