Другие языки программирования и технологии

абсолютные непонятки с перечислением констант (enum) в с++ соответсвенно

саму ипостась перечислениий я понял (увеличивается на один и ещё т.д.)

но вот отрывок примера перечислений

enum color { RED, GREEN, BLUE };

маин функция()
{
color c; /* вот зачем тут так делать и смысл вообще инициализировать
каак вообще изменить это переменное C*/
switch(c) // какое тут может быть вообще значение
{
case RED:
// do something
break;
case BLUE:
// do something
break;
}

}

объясните пожайлусто а то мой псевдо мозг не хочет это осознать
заранее спасибо
По умолчанию значения перечисления нумеруются, поэтому и в switch можно использовать

Как известно, перечисления - это тип который может содержать значения указанные программистом. Целочисленные именованные константы могут быть определены как члены перечисления. Например:
enum { RED, GREEN, BLUE };
определяет три целочисленные константы и присваивает им значения. По умолчанию, значения присваиваются по порядку начиная с нуля, т. е. RED == 0, GREEN == 1 и BLUE == 2. Перечисление также может быть именованным:
enum color { RED, GREEN, BLUE };
Каждое перечисление - это отдельный тип, и тип каждого члена перечисления - это само перечисление. Например RED имеет тип color. Объявление типа переменной как color, вместо обычного unsigned, может подсказать и программисту и компилятору о том как эта переменная должна быть использована. Например:
void f(color c)
{
switch(c){
case RED:
// do something
break;
case BLUE:
// do something
break;
}
}

В этом случае компилятор может выдать предупреждение о том, что обрабатываются только два значения color из трёх возможных.

Таким образом перечисления это:

- Создание именованных констант с автоматическим увеличением значения константы

- Предупреждения о возможных ошибках со стороны компилятора
Сергей Люкевич
Сергей Люкевич
2 195
Лучший ответ
Борис Шевчук можете объяснить как
каак switch понимает что там должно быть в переменной С
Перечисления содержат именованные константы целого типа int и только по умолчанию отсчёт начинается с нуля, но вы самостоятельно можете менять как порядок отсчёта так и начинать отсчёт с отрицательного числа. Если не задать явно значение для такой константы, то она увеличит своё значение на единицу по отношению к предыдущей.
Именованные константы позволяют сделать код понятнее, чем целые числа. Пример использования:
enum color {RED = 1, GREEN, BLUE, RANDOM};
Это значит, что RED == 1, GREEN == 2, BLUE == 3, RANDOM == 4.
Т. е. эта строчка эквивальентна этим вместе взятым:
const int RED = 1;
const int GREEN = 2;
const int BLUE = 3;
const int RANDOM = 4.

switch(c) - нельзя так, это бред!

enum color {RED = 1, GREEN, BLUE, RANDOM};
int x = 2;
switch(x)
{
case RED:
/*...*/
break;
case GREEN:
/*...*/
break;
case BLUE:
/*...*/
break;
case RANDOM:
/*...*/
break;
default:
break;
}

Это будет эквивальентно такой записи:

int x = 2;
switch(x)
{
case 1:
/*...*/
break;
case 2:
/*...*/
break;
case 3:
/*...*/
break;
case 4:
/*...*/
break;
default:
break;
}
Илья Просеков >> switch(c) - нельзя так, это бред!

Вы не правы! МОЖНО!
По умолчанию значения перечисления нумеруются с нуля!
Т.е. enum color {RED, GREEN, BLUE, RANDOM};
на самом деле
enum color {RED=0, GREEN=1, BLUE=2, RANDOM=3};

и switch(c) прекрасно отработает