Partilhar via


switch Declaração (C)

As switch instruções e case ajudam a controlar operações condicionais e ramificadas complexas. A switch declaração transfere o controle para uma declaração dentro de seu corpo.

Sintaxe

selection-statement:
switch ( expression ) statement

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

Observações

Uma switch instrução faz com que o controle seja transferido para um labeled-statement em seu corpo de instrução, dependendo do valor de expression.

Os valores de expression e cada constant-expression um deve ter um tipo integral. A constant-expression deve ter um valor integral constante inequívoco em tempo de compilação.

O controle passa para a case instrução cujo constant-expression valor corresponde ao valor de expression. A switch instrução pode incluir qualquer número de case instâncias. No entanto, não há dois constant-expression valores dentro da mesma switch instrução podem ter o mesmo valor. A execução do switch corpo da declaração começa na primeira instrução dentro ou após a correspondência labeled-statement. A execução prossegue até ao final do organismo, ou até que uma break declaração transfira o controlo para fora do organismo.

O switch uso da instrução geralmente se parece com isto:

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
}

Você pode usar a instrução para encerrar o break processamento de uma determinada instrução rotulada dentro da switch instrução. Estende-se até ao final da switch declaração. Sem break, o programa continua para a próxima instrução rotulada, executando as instruções até que um break ou o final da instrução seja alcançado. Esta continuação pode ser desejável em algumas situações.

A default instrução é executada se nenhum caseconstant-expression valor for igual ao valor de expression. Se não houver nenhuma default declaração e nenhuma case correspondência for encontrada, nenhuma das declarações no switch corpo será executada. Pode haver, no máximo, uma default declaração. A default declaração não precisa vir no final. Pode aparecer em qualquer parte do corpo da switch declaração. Um case rótulo ou default só pode aparecer dentro de uma switch instrução.

O tipo de switchexpression e caseconstant-expression deve ser integral. O valor de cada caseconstant-expression um deve ser único dentro do corpo da declaração.

Os case rótulos e default do corpo da switch declaração são significativos apenas no teste inicial que determina onde a execução começa no corpo da declaração. switch as instruções podem ser aninhadas. Todas as variáveis estáticas são inicializadas antes de serem executadas em qualquer switch instrução.

Observação

As declarações podem aparecer no cabeçalho da instrução composta que forma o switch corpo, mas as inicializações incluídas nas declarações não são executadas. A switch instrução transfere o controle diretamente para uma instrução executável dentro do corpo, ignorando as linhas que contêm inicializações.

Os exemplos a seguir ilustram switch afirmações:

switch( c )
{
    case 'A':
        capital_a++;
    case 'a':
        letter_a++;
    default :
        total++;
}

Todas as três instruções do switch corpo neste exemplo são executadas se c for igual a 'A', uma vez que nenhuma break instrução aparece antes do seguinte case. O controle de execução é transferido para a primeira instrução (capital_a++;) e continua em ordem através do resto do corpo. Se c é igual a 'a', letter_a e total são incrementados. Só total é incrementado quando c não é igual 'A' ou 'a'.

switch( i )
{
    case -1:
        n++;
        break;
    case 0 :
        z++;
        break;
    case 1 :
        p++;
        break;
}

Neste exemplo, uma break instrução segue cada instrução do switch corpo. A break instrução força uma saída do corpo da instrução depois que uma instrução é executada. Se i for igual a -1, apenas n é incrementado. A break instrução n++; a seguir faz com que o controle de execução passe para fora do corpo da instrução, ignorando as instruções restantes. Da mesma forma, se i é igual a 0, só z é incrementado, se i é igual a 1, só p é incrementado. A declaração final break não é estritamente necessária, uma vez que o controle passa para fora do corpo no final da instrução composta. Está incluído para consistência.

Uma única instrução pode conter vários case rótulos, como mostra o exemplo a seguir:

switch( c )
{
    case 'a' :
    case 'b' :
    case 'c' :
    case 'd' :
    case 'e' :
    case 'f' :  convert_hex(c);
}

Neste exemplo, se constant-expression for igual a qualquer letra entre 'a' e 'f', a convert_hex função será chamada.

Específico da Microsoft

Microsoft C não limita o número de case valores em uma switch instrução. O número é limitado apenas pela memória disponível. ANSI C exige que pelo menos 257 case rótulos sejam permitidos em uma switch declaração.

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

Ver também

switch Instrução (C++)