Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Тема 4.7 Реализация оператора switch




 

Оператор switch (C)

Статья

02. 05. 2022

Чтение занимает 3 мин

Участники: 6

Операторы switch и case помогают управлять сложными условными операциями и операциями ветвления. Оператор switch передает управление в оператор внутри своего тела.

Синтаксис

selection-statement:
switch ( expression ) statement

labeled-statement:
case constant-expression: statement
default: statement

Комментарии

Оператор switch передает управление одному из labeled-statement в своем теле в зависимости от значения expression.

Значения expression и значение каждого constant-expression должны иметь целочисленный тип. Выражение constant-expression должно иметь однозначное константное целочисленное значение во время компиляции.

Управление передается оператору case , значение constant-expression которого соответствует значению выражения expression. Оператор switch может содержать неограниченное число экземпляров case. Однако значения ни одной из пар выражений constant-expression в одном операторе switch не должны совпадать. Выполнение тела оператора switch начинается с первого соответствующего оператора labeled-statement или после него. Выполнение продолжается до конца тела оператора или пока оператор break не передаст управление за пределы тела.

Оператор switch обычно используется следующим образом:

CКопировать

switch ( expression )

{

// declarations

//. . .

case constant_expression:

   // statements executed if the expression equals the

   // value of this constant_expression

   break;

default:

   // statements executed if expression does not equal

   // any case constant_expression

}

Оператор break можно использовать для завершения обработки определенного оператора с меткой в операторе switch. Он выполняет ветвление до конца оператора switch. Без оператора break выполнение программы продолжается до следующего оператора с меткой. Операторы будут выполняться до достижения оператора break или конца всего оператора. В некоторых случаях может требоваться именно такое поведение.

Оператор default выполняется, если ни одно из значений case constant-expression не равно значению expression. Если оператор default не указан и соответствующий вариант case не найден, ни один из операторов в теле оператора switch не выполняется. Допускается не более одного оператора default. Оператор default не обязательно должен находиться в конце. Он может располагаться в любом месте тела оператора switch. Метка case или default может располагаться только внутри оператора switch.

Выражения switch expression и case constant-expression должны быть целочисленного типа. Значение каждого case constant-expression в теле оператора должно быть уникальным.

Метки case и default тела оператора switch имеют значения только при начальной проверке, которая определяет, с какого места тела оператора начинается выполнение. Операторы switch могут быть вложенными. Любые статические переменные инициализируются до выполнения любых операторов switch.

Примечание

Объявления могут располагаться в начале составного оператора, образующего тело оператора switch, но инициализации, включенные в объявления, не выполняются. Оператор switch передает управление непосредственно на выполняемый оператор в теле, минуя все строки, содержащие инициализации.

В следующих примерах кода показаны операторы switch:

CКопировать

switch( c )

{

case 'A':

   capital_a++;

case 'a':

   letter_a++;

default:

   total++;

}

В этом примере, если переменная c равна 'A', выполняются все три оператора тела switch , так как оператор break перед следующим оператором case отсутствует. Управления передается первому оператору (capital_a++; ) и продолжается по-порядку во всей остальной части тела. Если переменная c равна 'a', увеличиваются значения переменных letter_a и total. Если переменная c не равна 'A' или 'a', увеличивается только значение переменной total.

CКопировать

switch( i )

{

case -1:

   n++;

   break;

case 0:

   z++;

   break;

case 1:

   p++;

   break;

}

В этом примере оператор break указан после каждого оператора тела switch. Оператор break вызывает принудительный выход из тела оператора после выполнения одного оператора. Если переменная i равна –1, увеличивается только значение переменной n. Оператор break после оператора n++; передает управление за пределы тела оператора, минуя оставшиеся операторы. Аналогично, если переменная i равна 0, увеличивается только значение переменной z; если переменная i равна 1, увеличивается только значение переменной p. Заключительный оператор break , строго говоря, не требуется, так как управление передается из тела в конце составного оператора. Он добавлен для единообразия.

Один оператор может содержать несколько меток case , как показано в следующем примере:

CКопировать

switch( c )

{

case 'a':

case 'b':

case 'c':

case 'd':

case 'e':

case 'f': convert_hex(c);

}

В этом примере, если константное выражение равно любой букве в диапазоне от 'a' до 'f', вызывается функция convert_hex.

Специально для систем Майкрософт

Microsoft C не ограничивает количество значений case в операторе switch. Это число ограничивается только объемом доступной памяти. ANSI C требует, чтобы в операторе switch можно было использовать не менее 257 меток case.

В Microsoft C расширения Майкрософт по умолчанию (default) включены. Используйте параметр компилятора /Za для отключения этих расширений.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...