Alternar instrução (C++)

Permite a seleção entre várias seções de código, dependendo do valor de uma expressão integral.

switch ( expression )
   case constant-expression : statement
   [default  : statement]

Comentários

O expressão deve ser do tipo integral ou de um tipo de classe para o qual há uma conversão inequívoca para tipo integral.Promoção integral é realizada conforme descrito em Promoções Integral.

O switch corpo da declaração consiste em uma série de case rótulos e um recurso opcional padrão rótulo.Não há duas expressões constantes na case instruções podem ser avaliada como o mesmo valor.O padrão rótulo pode aparecer apenas uma vez.As instruções rotuladas não são requisitos sintáticos, mas o switch declaração não faz sentida sem eles.A instrução padrão não precisa vir no final; ele pode aparecer em qualquer lugar no corpo da instrução switch.Um rótulo case ou default só pode aparecer dentro de uma instrução switch.

O expressão de constante em cada case rótulo é convertido para o tipo de expressão e comparados com expressão de igualdade.Passa o controle para a instrução cuja caseexpressão de constante corresponde ao valor de expressão. O comportamento resultante é mostrado na tabela a seguir.

Comportamento de instrução switch

Condição

Ação

Valor convertido corresponde da expressão controlar promovida.

Controle é transferido para a instrução após esse rótulo.

Nenhuma das constantes coincidir com as constantes na case rotula; um padrão rótulo estiver presente.

O controle é transferido para o padrão rótulo.

Nenhuma das constantes coincidir com as constantes na case rotula; padrão rótulo não estiver presente.

O controle é transferido para a instrução após a switch instrução.

Se uma expressão correspondente for encontrada, o controle não é impedida pela subseqüentes case ou padrão rótulos.O quebra declaração é usada para interromper a execução e transferir o controle para a instrução após a switch instrução.Sem um quebra instrução, cada instrução do correspondente caso rótulo para o fim da switch, incluindo o padrão, é executado.Por exemplo:

// switch_statement1.cpp
#include <stdio.h>

int main() {
   char *buffer = "Any character stream";
   int capa, lettera, nota;
   char c;
   capa = lettera = nota = 0;

   while ( c = *buffer++ )   // Walks buffer until NULL
   {
      switch ( c )
      {
         case 'A':
            capa++;
            break;
         case 'a':
            lettera++;
            break;
         default:
            nota++;
      }
   }
   printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
      capa, lettera, (capa + lettera + nota) );
}

No exemplo acima, capa é incrementado se c é uma maiúscula A.O break a instrução após a capa++ termina a execução da switch corpo de instrução e controle passa para o while loop.Sem o break instrução, lettera e nota também deve ser incrementada.Uma finalidade similar é servida pela break instrução para case 'a'.Se c é uma minúsculas a, lettera é incrementado e o break instrução Finaliza a switch o corpo de instrução.Se c não é um a ou A, o default instrução é executada.

Um bloco interno de um switch instrução pode conter definições com inicializações, contanto que eles sejam acessíveis — ou seja, não ignorado por todos os caminhos possíveis de execução.Nomes introduzidos usando essas declarações têm escopo local.Por exemplo:

// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
   switch( tolower( *argv[1] ) )
   {
       // Error. Unreachable declaration.
       char szChEntered[] = "Character entered was: ";
   
   case 'a' :
       {
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";
       cout << szChEntered << "a\n";
       }
       break;
   
   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;
   
   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
}

A switch instrução pode ser aninhada.Em tais casos, case ou padrão rótulos associar com o mais próximo switch declaração que inclui-las.

Específicos do Microsoft

Microsoft c não limita o número de valores em um switch instrução.O número é limitado apenas pela memória disponível.ANSI c requer pelo menos 257 rótulos case ser permitido em um switch instrução.

O padrão Microsoft C é que as extensões do Microsoft estão habilitadas.Use o /Za opção de compilador para desativar essas extensões.

Consulte também

Referência

Instruções de seleção (C++)

Palavras-chave C++

O uso de rótulos no caso de instrução