Использование директивы #define для обозначения элементов case в конструкции switch

Да, каждый при своём мнении… Я считаю, всё что улучшает наглядность - допустимо! И не только допустимо, но и приветствуется.

Согласен.
Но макрос, содержащий непарные фигурные скобки, то есть меняющий блоки кода. НЕ УЛУЧШАЕТ наглядность. Я тебе это говорю с момента знакомства на форуме, а ты их все равно юзаешь! ;)))) Охххх…

Ну так Петрович не даст соврать: как известно, brainfuck - самый наглядный язык в мире!

исходя из наглядности свитч-кейс лучше

Я бы сказал, для всех привычнее.

Привычнее для всех - да. Но. Я маскирую все детали. Мне не нужно придумывать названия кейсам. При каждом проходе выполняется только один шаг. Макро, как и функции пишешь один раз. И названия говорят сами за себя

а если необходимо не на след шаг перейти, а например в третий сначала списка?

Тогда обычный свич/кейс.

Я забыла спросить, bool занимает 1 байт

enum {
  KEY_ON,
  KEY_OFF,
} activation_stage;

А такая конструкция сколько занимает?

такая - 4 байта, а вот так

enum activation_stage : uint8_t{
  KEY_ON,
  KEY_OFF,
};

2 байта

1 лайк

Но это флеш память?

С чего вдруг?

Ой,да, это же не PROGMEM
Спасибо.

enum {
  SEARCH,
  WAITING,
  NET_FOUND,
  NET_NOT_FOUND,
} modem_setup_step;

  switch (modem_setup_step) {

    case SEARCH:
      modem_setup_step = WAITING;
      break;

    case WAITING:
      modem_setup_step = SEARCH;
      break;
  }

Тогда и в switch выгоднее использовать одну переменную типа uint8_t, тогда будет 1 байт.
Или?
case 0://+1 байт
case 1://+1 байт

По умолчанию размер элементов enum - int, т.е. 2 байта. Числовая константа по умолчанию - тоже int, т.е. 2 байта. Поэтому для перечислений (если памяти жалко) лучше задавать размер явно. И не использовать числовые константы в switch

1 лайк

То есть case 0: это 2 байта? int

Так и есть

1 лайк

Спасибо.

Я почему то думал, что если не создавать
и не обьявлять объект нумерации, то ничего такая конструкция занимать не должна.

Типа вот так :
0 байт и конструкция эквивалентна define`у


enum {OFF=0,ON};

А вот так 2 байта


enum ENUM{OFF=0,ON}myEnum;
myEnum=OFF;

А вот так точно 1 байт будет


enum class TSwitchState : bool { Off = false, On = true };

TSwitchState SwitchState = TSwitchState::Off;

bool можно заменить на uint8_t, тоже 1 байт займёт

2 лайка