#define FLAG_FAILED:1
在大多數人都稱之爲「位標誌」的意義上,它並不是真正的旗幟。這也是不好的語法。
位標誌通常被定義爲您有一個類型,並通過設置它們來打開「on」位。你通過「清除」標誌將它們關閉。爲了比較位標誌是否打開,可以使用所謂的按位運營商AND
(例如&)。
所以你BIT0(例如2^0)。將定義如BIT0 = 0x00000001
和BIT1(例如2^1)BIT1 = 0x00000002
。如果你想堅持定義您可以用設置和清除這種方式做到這一點:
#ifndef setBit
#define setBit(word, mask) word |= mask
#endif
#ifndef clrBit
#define clrBit(word, mask) word &= ~mask
#endif
或作爲模板
template<typename T>
inline T& setBit(T& word, T mask) { return word |= mask; }
template<typename T>
inline T& clrBit(T& word, T mask) { return word &= ~mask; }
如果你想設置該位,可以這麼說,你可以有一個狀態設置如下:
setBit(SystemState, SYSTEM_ONLINE);
或
setBit(SystemState, <insert type here>SYSTEM_ONLINE);
結算將是相同的只是clrBit
取代setBit
。
比較,只是這樣做:
if (SystemState & SYSTEM_ONLINE) { ... // do some processing
}
,如果這是一個struct
然後,引用struct
。
簡單的說。爲什麼不能像這樣回答所有問題?謝謝,託尼。 – DeadCapacitor