Поделиться через


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

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

Синтаксис

  • оператор-выбора:
    **switch (выражение)**оператор

  • оператор-с-меткой:
    case константное-выражение : оператор

    default : оператор

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

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

switch ( выражение )

{

   декларации 

   .

   .

   .

   case константное-выражение : 

      операторы, выполняемые, если выражение равно 

      значению этого константного-выражения 

      .

      .

      .

      break; 

   default :

      операторы, выполняемые, если выражение не равно 

      ни одному из константных-выражений 

}

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

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

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

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

Примечание

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

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

switch( c ) 
{
    case 'A':
        capa++;
    case 'a':
        lettera++;
    default :
        total++;
}

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

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, как показано в следующем примере:

case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' :  hexcvt(c);

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

Блок, относящийся только к системам Microsoft

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

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

Завершение блока, относящегося только к системам Microsoft

См. также

Ссылки

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