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.