switch Istruzione (C)

Le switch istruzioni e case consentono di controllare operazioni condizionali e di branching 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

Commenti

Un'istruzione switch causa il trasferimento di un controllo 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 qualsiasi numero 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 trasferisce il controllo fuori 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 un'istruzione etichettata specifica all'interno dell'istruzione switch . Viene rami alla fine dell'istruzione switch . Senza break, il programma continua all'istruzione etichettata successiva, eseguendo le istruzioni fino a quando non viene raggiunta una break o la fine dell'istruzione. Questa continuazione può essere auspicabile in alcune situazioni.

L'istruzione default viene eseguita se nessun caseconstant-expression valore è uguale al valore di expression. Se non default è presente alcuna istruzione e non viene trovata alcuna corrispondenza, nessuna case 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 ovunque nel corpo dell'istruzione switch . Un'etichetta case o default può essere visualizzata solo all'interno di un'istruzione switch .

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

Le case etichette e default del corpo dell'istruzione switch 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 di questo esempio vengono eseguite se c è uguale a 'A', poiché non viene visualizzata alcuna break istruzione prima del 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' 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 breakn++; seguente causa 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 passa fuori dal corpo alla fine dell'istruzione composta. È incluso per coerenza.

Un'unica 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 corrisponde 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++)