(Вопрос связан с моими предыдущими вопросами here, here, here и here).Enum vs Macro States C++
Я поддерживаю очень старое приложение, перенесенное много лет назад с DOS на Windows, но многие старые конвенции C все еще переносятся вперед.
Тот частности конвенции является SetBit и clrBit макро:
#ifndef setBit
#define setBit(word, mask) word |= mask
#endif
#ifndef clrBit
#define clrBit(word, mask) word &= ~mask
#endif
я обнаружил, что может объявить переменную в качестве типа перечислений и установить мой переменной, равной одному из перечисленных значений, которые определены.
enum SystemStatus
{
SYSTEM_ONLINE = BIT0,
SYSTEM_STATUS2 = BIT1,
SYSTEM_STATUS3 = BIT2,
SYSTEM_STATUS4 = BIT3
};
С BIT0 = 0x00000001
, BIT1 = 0x00000002
и т.д.
SystemStatus systemStatus;
systemStatus = SYSTEM_ONLINE
По вашему мнению, использует SetBit и clrBit макросы более C нравится или C++, как - и это было бы лучше просто объявить переменные как перечисляемый тип и избавиться от всего старого материала setBit/clrBit?
Как указывает Нейл, они не совсем то же самое. Тем не менее, на C++ вы никогда не должны использовать макросы как функции, вместо этого используйте функцию шаблона. Кроме того, для набора битов просто используйте 'std :: bitset' и делайте с ним. (Более удобный интерфейс.) – GManNickG
Чтобы перечислить все возможные состояния таким образом, вам нужно 2^(количество бит) состояний. Наверное, не самое чистое решение. –
@Justin Такова природа бит. – 2010-07-13 19:57:50