Condividi tramite


switch Istruzione (C)

Le switch istruzioni e case consentono di controllare operazioni condizionali e di diramazione complesse. L'istruzione switch trasferisce il controllo a un'istruzione all'interno del corpo.

Sintassi

selection-statement:
switch ( expression ) statement

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

Osservazioni:

Un'istruzione switch fa sì che il controllo si trasferisca a uno labeled-statement nel corpo dell'istruzione, a seconda del valore di expression.

I valori di expression e ognuno constant-expression devono avere un tipo integrale. Un constant-expression oggetto deve avere un valore integrale costante non ambiguo in fase di compilazione.

Il controllo passa all'istruzione case il cui constant-expression valore corrisponde al valore di expression. L'istruzione switch può includere un numero qualsiasi di case istanze. Tuttavia, nessun valore constant-expression all'interno della stessa switch istruzione può avere lo stesso valore. L'esecuzione del corpo dell'istruzione switch inizia alla prima istruzione in o dopo l'oggetto corrispondente labeled-statement. L'esecuzione procede fino alla fine del corpo o fino a quando un'istruzione break non trasferisce il controllo dal corpo.

L'utilizzo dell'istruzione switch in genere è simile alla seguente:

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
}

È possibile usare l'istruzione per terminare l'elaborazione break di una particolare istruzione etichettata all'interno dell'istruzione switch . Viene rami alla fine dell'istruzione switch . Senza break, il programma continua con l'istruzione etichettata successiva, eseguendo le istruzioni fino a quando non viene raggiunta una break o la fine dell'istruzione. Questa continuazione può essere utile in alcune situazioni.

L'istruzione default viene eseguita se nessun case constant-expression valore è uguale al valore di expression. Se non è presente alcuna default istruzione e non viene trovata alcuna case corrispondenza, nessuna delle istruzioni nel switch corpo viene eseguita. Può essere presente al massimo un'istruzione default . L'istruzione default non deve venire alla fine. Può essere visualizzato in qualsiasi punto del corpo dell'istruzione switch . Un'etichetta case o default può essere visualizzata solo all'interno di un'istruzione switch .

Il tipo di switch expression e case constant-expression deve essere integrale. Il valore di ogni case constant-expression oggetto deve essere univoco all'interno del corpo dell'istruzione.

Le case etichette e default del switch corpo dell'istruzione sono significative solo nel test iniziale che determina dove inizia l'esecuzione nel corpo dell'istruzione. switch Le istruzioni possono essere annidate. Tutte le variabili statiche vengono inizializzate prima dell'esecuzione in qualsiasi istruzione switch.

Nota

Le dichiarazioni possono essere visualizzate all'inizio dell'istruzione composta che costituisce il corpo switch, ma le inizializzazioni incluse nelle dichiarazioni non vengono eseguite. L'istruzione switch trasferisce il controllo direttamente a un'istruzione eseguibile nel corpo, ignorando le righe che contengono inizializzazioni.

Gli esempi seguenti illustrano le istruzioni switch:

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

Tutte e tre le istruzioni del switch corpo in questo esempio vengono eseguite se c è uguale a 'A', poiché non viene visualizzata alcuna break istruzione prima dell'oggetto seguente case. Il controllo di esecuzione viene trasferito alla prima istruzione (capital_a++;) e procede in ordine nel resto del corpo. Se c è uguale a 'a', letter_a e total vengono incrementati. Viene incrementato solo total quando c non è uguale 'A' a o 'a'.

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

In questo esempio, un'istruzione break segue ogni istruzione del switch corpo. L'istruzione break forza un'uscita dal corpo dell'istruzione dopo l'esecuzione di un'istruzione. Se i è ugual a -1, solo n viene incrementato. L'istruzione break n++; seguente determina il passaggio del controllo di esecuzione dal corpo dell'istruzione, ignorando le istruzioni rimanenti. Analogamente, se i è uguale a 0, solo z viene incrementato; se i è uguale a 1, solo p viene incrementato. L'istruzione finale break non è strettamente necessaria, poiché il controllo esce dal corpo alla fine dell'istruzione composta. È incluso per coerenza.

Una singola istruzione può contenere più case etichette, come illustrato nell'esempio seguente:

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

In questo esempio, se constant-expression è uguale a qualsiasi lettera tra 'a' e 'f', viene chiamata la convert_hex funzione .

Specifico di Microsoft

Microsoft C non limita il numero di case valori in un'istruzione switch . Tale numero è limitato solo dalla memoria disponibile. ANSI C richiede almeno 257 case etichette consentite in un'istruzione switch .

Per default Microsoft C è che le estensioni Microsoft sono abilitate. Usare l'opzione del compilatore /Za per disabilitare queste estensioni.

Vedi anche

switch Istruzione (C++)