Параметр обычно называется «$ FOO flags», а значения * -1001 * -ed.Дело в том, что параметр является числовым типом, который создается как побитовый or
из нескольких возможных значений.
В функциях обработки значения обычно проверяются с помощью побитового and
:
if ( (flags & API_FULLSCREEN) != 0 )
Необходимо соблюдать осторожность при назначении значений таким образом, чтобы операция ИЛИ была линейной.Другими словами, не устанавливайте один и тот же бит в двух разных значениях or
, как вы делали в заголовке.Например,
#define API_FULLSCREEN 0x1
#define API_NO_DELAY 0x2
#define API_BLAH_BLAH 0x4
работает и позволяет вам деконструировать все комбинации флагов в вашей функции, но
#define API_FULLSCREEN 0x1
#define API_NO_DELAY 0x2
#define API_BLAH_BLAH 0x3
нет, потому что API_FULLSCREEN | API_NO_DELAY == API_BLAH_BLAH
.
ПросмотрНа более высоком уровне флаг int представляет собой список переменных аргументов бедняков.Если вы рассматриваете C ++, вы должны инкапсулировать такие детали в классе или хотя бы в std::bitset
.