Язык программирования Си для персонального компьютера | страница 97
Выполнение тела оператора-переключателя switch начинается с выбранного таким образом оператора и продолжается до конца тела или до тех пор, пока какой-либо оператор не передаст управление за пределы тела.
Оператор, следующий за ключевым словом default, выполняется, если ни одна из констант варианта не равна значению выражения переключения. Если же слово default опущено, то ни один оператор в теле переключателя не выполняется, и управление передается на оператор, следующий за переключателем в программе.
Выражение переключения должно иметь целочисленный тип. В версии 4 СП MSC этот тип не должен превышать по размеру int; в версии 5 СП MSC и в СП ТС это может быть любой целочисленный тип (в том числе enum). Однако в версии 5 СП MSC выражение переключения всегда преобразуется к типу int. Если при этом преобразовании возможна потеря значащих битов, то компилятор выдаст предупреждающее сообщение. Тип каждой константы варианта также приводится к типу выражения переключения.
Синтаксически конструкции case и default являются метками (однако, на них нельзя передать управление по оператору goto). Метки case и default существенны только при начальной проверке, когда выбирается оператор для выполнения в теле переключателя. Все операторы тела, следующие за выбранным, выполняются последовательно, как бы "не замечая" меток case и default, если только какой-либо из операторов не передаст управление за пределы тела оператора switch. Для выхода из тела переключателя обычно используется оператор разрыва break. Одна из распространенных ошибок состоит в том, что программисты забывают разделять альтернативные операторы в теле переключателя операторами break.
В заголовок составного оператора, формирующего тело оператора switch, можно помещать объявления (см. раздел 5.3), но инициализаторы, включенные в объявления, не будут выполнены, поскольку при выполнении оператора