Оператор выбора switch
Выполнение оператора выбора switch приводит к передаче управления на один из нескольких вложенных операторов в зависимости от значения выражения. Оператор выбора имеет вид
switch ( выражение ) оператор
В выражении выполняется обычное арифметическое преобразование типов, а результат должен иметь тип int. Оператор обычно бывает составным; любой из операторов, вложенных в него, может быть помечен одним или несколькими префиксами case вида
case константное_выражение :
Типом константного_выражения должен быть int. Никакие два константных_выражения в одном операторе switch не могут иметь одинаковые значения. Точное определение константных_выражений содержится в разделе КОНСТАНТНЫЕ ВЫРАЖЕНИЯ.
Кроме того, можно задать не более одного оператора с префиксом вида
default :
который принято помещать после всех операторов с префиксами case.
При выполнении оператора switch значение выражения вычисляется и сравнивается по очереди со значениями всех константных_выражений из префиксов case. При обнаружении совпадения управление передается на оператор, следующий за сопоставленным префиксом. В противном случае, если указан префикс default, управление передается на оператор с этим префиксом; иначе ни один из операторов в конструкции switch не выполняется.
Префиксы case и default не оказывают влияния на поток управления; оно беспрепятственно продолжается через эти префиксы. Для выхода из конструкции выбора используется оператор break (см. следующий пункт).
Поскольку обычно оператор, входящий в switch, является составным, в начале этого оператора могут быть указаны описания; однако инициализации автоматических и регистровых переменных не действуют. Приведем несложный пример полного оператора switch:
switch (c) { case 'r': rflag = TRUE; break; case 'w': wflag = TRUE; break; default: (void) fprintf (stderr, "Неизвестная опция\n"); exit (2); }