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 case
constant-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 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 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 break
n++;
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per