Я новичок в C, и мне немного нравится играть с побитовыми операциями. То, что я делаю, похоже, работает, мне просто интересно, считается ли это хорошим стилем.
Хорошо, скажем, у моей программы есть 3 параметра командной строки: -a
, -b
и -c
. Раньше я бы использовал 3 int как логические значения, скажем, aFlag
, bFlag
и cFlag
. Затем, когда я вызываю свою processOpts( int *aFlag, int *bFlag, int *cFlag)
функцию, я передаю &aFlag
, &bFlag
и &cFlag
в качестве аргументов и устанавливаю их как *aFlag = 1
.
Вот мой новый подход: иметь 1 int *options
для представления всех опций и рассматривать его как массив логических значений. Итак, чтобы установить их в функции:
case 'a':
*options |= 1;
break;
case 'b':
*options |= 2;
break;
case 'c':
*options |= 4;
break;
Затем, вернувшись в main
(или где-либо еще), когда я хочу проверить, выбрана ли опция:
if ( *options & 1 )
// Option 'a' selected
if ( *options & 2 )
// Option 'b' selected
if ( *options & 4 )
// Option 'c' selected
Мой вопрос: какой метод считается лучшим стилем? Первый способ может быть более понятным и менее подверженным ошибкам, тогда как второй, вероятно, будет способствовать более легкому рефакторингу (не нужно менять прототип функции, поскольку это всего лишь один int
).
Или есть еще лучший способ сделать это? :D
РЕДАКТИРОВАТЬ: добавлены перерывы в соответствии с предложением Мат.
Спасибо за все ответы, я очень впечатлен этим сообществом и его готовностью помочь всем учиться - вы, ребята, молодцы!