- •6. Операторы
- •6.1. Операторное выражение
- •6.2. Составной оператор (или блок)
- •6.3. Условные операторы
- •6.4. Оператор while
- •6.5. Оператор do
- •6.6. Оператор for
- •6.9. Оператор continue
- •6.10. Оператор возврата
- •6.7. Оператор switch
- •6.8. Оператор break
- •6.11. Оператор goto
- •6.12. Помеченный оператор
- •6.13. Пустой оператор
6.7. Оператор switch
Оператор switch (переключатель), вызывает передачу
управления к одному из нескольких операторов, в зависимости
от значения выражения. Оператор имеет форму
switch (выражение) оператор
В выражении проводятся обычные арифметические преобразова-
ния, результат должен иметь тип int. Оператор обычно явля-
ется составным. Любой оператор внутри этого оператора может
быть помечен одним или более вариантным префиксом case, име-
ющим форму:
case константное выражение:
Где константное выражение должно иметь тип int. Никакие две
вариантные константы в одном и том же переключателе не могут
иметь одинаковое значение. Точное определение константного
выражения приводится ниже.
Кроме того, может присутствовать один операторный пре-
фикс вида
default:
При выполнении оператора switch вычисляется входящее в
него выражение и сравнивается с каждой вариантной констан-
той. Если одна из вариантных констант оказывается равной
значению этого выражения, то управление передается опера-
тору, который следует за совпадающим вариантным префиксом.
Если ни одна из вариантных констант не совпадает со
значением выражения и если при этом присутствует префикс
default, то управление передается оператору, помеченному
этим префиксом. Если ни один из вариантов не подходит и пре-
фикс default отсутствует, то ни один из операторов в перек-
лючателе не выполняется.
Сами по себе префиксы case и default не изменяют выпол-
нения программы, программа выполняется последовательно, пока
не встретится явная передача управления. Для выхода из
переключателя имеется оператор break (п.0.8).
Обычно оператор, который входит в переключатель, явля-
ется составным. Описания могут появляться в начале этого
оператора, но инициализации автоматических и регистровых
переменных будут неэффективными.
Пример:
switch (regim) {
case 'x': regx++;
case 'X': case 'Y': regY++; break;
case '-': regx = 0; break;
default: err("Ошибка"); goto next;
}
6.8. Оператор break
Оператор
break;
вызывает завершение выполнения наименьшего охватывающего
этот оператор оператора while, do, for или switch; управле-
ние передается оператору, следующему за завершенным операто-
ром.
6.9. Оператор continue
Оператор
continue;
приводит к передаче управления на продолжающую цикл часть
наименьшего охватывающего этот оператор оператора while, do
или for; то есть на конец цикла. Более точно, в каждом из
операторов
while(...) { | do { | for(...) {
... | ... | ...
contin: ; | contin: ; | contin: ;
} | } while(...); | }
-37-
оператор continue эквивалентен оператору goto contin. (За
contin: следует пустой оператор; см. п. 0.13.).
6.10. Оператор возврата
Возвращение из функции в вызывающую программу осуществ-
ляется с помощью оператора return, который имеет одну из
следующих форм
return;
return выражение;
В первом случае возвращаемое значение неопределено. Во вто-
ром случае в вызывающую функцию возвращается значение выра-
жения. Если требуется, выражение преобразуется к типу функ-
ции, в которой оно появляется, как в случае присваивания.
Попадание на конец функции эквивалентно возврату без возвра-
щаемого значения.
Возвращать можно значение арифметического типа, а также
структуру (но не массив).
