Цель C: способ проверить наличие флагов - PullRequest
2 голосов
/ 26 сентября 2011

Я использую битовый флаг, чтобы включить / отключить некоторые функции в моем коде.У меня есть следующее enum.

typedef enum function {
    function1 = 1 << 0,
    function2 = 1 << 1,
    function3 = 1 << 2,
    function4 = 1 << 3
};

Я знаю, что мне нужно использовать следующий код, чтобы проверить, какой флаг был включен.чтобы проверить каждый флаг, мне нужно иметь так много проверок условий «если».Есть ли способ, который может минимизировать количество операторов if требуется?Я новичок в цели C и надеюсь реализовать ее в цели C. Заранее спасибо.

1 Ответ

3 голосов
/ 26 сентября 2011

Да, объединить флаги с помощью побитового или:

if (flags & (function1 | function2 | function3 | function4))
{
  // any of the flags has been set
}

Более того, для проверки конкретного флага вам не нужна деталь == function1, достаточно flags & function1, так как она оцениваетили к нулю или function1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...