#define FLAG_FAILED:1
на самом деле не битовый флаг в том смысле, что большинство людей знают как «битовый флаг».Это также плохой синтаксис.
Флаги битов обычно определяются так, что у вас есть тип , и вы включаете «биты», «устанавливая» их.Вы выключаете их, «убирая» флаг.Для сравнения, если битовый флаг включен, вы используете то, что называется побитовый оператор 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);
очистка будетбыть таким же, просто замените setBit
на clrBit
.
. Для сравнения просто сделайте это:
if (SystemState & SYSTEM_ONLINE) { ... // do some processing
}
, если это значение в struct
, тогда, обратитесь к struct
.