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.