Istruzione switch (C)switch Statement (C)

Le istruzioni switch e case consentono di controllare le complesse operazioni condizionali e di diramazione.The switch and case statements help control complex conditional and branching operations. L'istruzione switch trasferisce il controllo a un'istruzione all'interno del corpo.The switch statement transfers control to a statement within its body.

SintassiSyntax

selection-statement:selection-statement:
switch ( expression ) statementswitch ( expression ) statement

labeled-statement:labeled-statement:
case constant-expression : statementcase constant-expression : statement

default : statementdefault : statement

Il controllo passa all'istruzione di cui constant-expression case corrisponde al valore di switch ( expression ).Control passes to the statement whose case constant-expression matches the value of switch ( expression ). L'istruzione switch può contenere qualsiasi numero di istanze case, ma due costanti case nella stessa istruzione switch non possono avere lo stesso valore.The switch statement can include any number of case instances, but no two case constants within the same switch statement can have the same value. L'esecuzione del corpo dell'istruzione inizia a partire dall'istruzione selezionata e continua fino alla fine del corpo o finché il controllo non viene trasferito fuori dal corpo tramite un'istruzione break.Execution of the statement body begins at the selected statement and proceeds until the end of the body or until a break statement transfers control out of the body.

L'utilizzo dell'istruzione switch in genere è simile alla seguente:Use of the switch statement usually looks something like this:

switch ( expression )switch ( expression )

{{

declarationsdeclarations

..

..

..

case constant-expression :case constant-expression :

istruzioni eseguite solo se l'espressione è uguale alstatements executed if the expression equals the

valore di questa constant-expressionvalue of this constant-expression

..

..

..

break;break;

default :default :

istruzioni eseguite se l'espressione non è uguale astatements executed if expression does not equal

qualsiasi constant-expression di caseany case constant-expression

}}

È possibile usare l'istruzione break per terminare l'elaborazione di una case particolare nell'istruzione switch e per creare un ramo alla fine dell'istruzione switch.You can use the break statement to end processing of a particular case within the switch statement and to branch to the end of the switch statement. Senza break, il programma continua alla case successiva, eseguendo le istruzioni fino a quando non viene raggiunto break o la fine dell'istruzione.Without break, the program continues to the next case, executing the statements until a break or the end of the statement is reached. In alcune situazioni, la continuazione può risultare utile.In some situations, this continuation may be desirable.

L'istruzione default viene eseguita se nessuna constant-expression case è uguale al valore di switch ( expression ).The default statement is executed if no case constant-expression is equal to the value of switch ( expression ). Se l'istruzione default viene omessa e non viene trovata nessuna corrispondenza case, non viene eseguita nessuna delle istruzioni nel corpo di switch.If the default statement is omitted, and no case match is found, none of the statements in the switch body are executed. Può essere inclusa al massimo un'istruzione default.There can be at most one default statement. L'istruzione default non deve necessariamente essere alla fine; può essere inclusa in un punto qualsiasi del corpo dell'istruzione switch.The default statement need not come at the end; it can appear anywhere in the body of the switch statement. Un'etichetta case o default può essere visualizzata solo in un'istruzione switch.A case or default label can only appear inside a switch statement.

Il tipo di switch expression e di constant-expression case deve essere integrale.The type of switch expression and case constant-expression must be integral. Il valore di ogni constant-expression case deve essere univoco all'interno del corpo dell'istruzione.The value of each case constant-expression must be unique within the statement body.

Le etichette case e default del corpo dell'istruzione switch sono significative solo nel test iniziale che determina il punto in cui inizia l'esecuzione nel corpo dell'istruzione.The case and default labels of the switch statement body are significant only in the initial test that determines where execution starts in the statement body. Le istruzioni switch possono essere annidate.Switch statements can be nested. Tutte le variabili statiche vengono inizializzate prima dell'esecuzione in qualsiasi istruzione switch.Any static variables are initialized before executing into any switch statements.

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.Declarations can appear at the head of the compound statement forming the switch body, but initializations included in the declarations are not performed. L'istruzione switch trasferisce il controllo direttamente a un'istruzione eseguibile nel corpo, ignorando le righe che contengono inizializzazioni.The switch statement transfers control directly to an executable statement within the body, bypassing the lines that contain initializations.

Gli esempi seguenti illustrano le istruzioni switch:The following examples illustrate switch statements:

switch( c )   
{  
    case 'A':  
        capa++;  
    case 'a':  
        lettera++;  
    default :  
        total++;  
}  

In questo esempio vengono eseguite tutte e tre le istruzioni del corpo di switch se c è uguale a 'A' dal momento che un'istruzione break non viene inclusa prima della case seguente.All three statements of the switch body in this example are executed if c is equal to 'A' since a break statement does not appear before the following case. Il controllo di esecuzione viene trasferito alla prima istruzione (capa++;) e procede in ordine nel resto del corpo.Execution control is transferred to the first statement (capa++;) and continues in order through the rest of the body. Se c è uguale a 'a', lettera e total vengono incrementati.If c is equal to 'a', lettera and total are incremented. Solo total viene incrementato se c non è uguale a 'A' o 'a'.Only total is incremented if c is not equal to 'A' or '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 corpo di switch.In this example, a break statement follows each statement of the switch body. L'istruzione break forza un'uscita dal corpo dell'istruzione dopo che viene eseguita un'istruzione.The break statement forces an exit from the statement body after one statement is executed. Se i è ugual a -1, solo n viene incrementato.If i is equal to -1, only n is incremented. L'istruzione break che segue l'istruzione n++; forza l'uscita del controllo di esecuzione dal corpo dell'istruzione, ignorando le istruzioni rimanenti.The break following the statement n++; causes execution control to pass out of the statement body, bypassing the remaining statements. Analogamente, se i è uguale a 0, solo z viene incrementato; se i è uguale a 1, solo p viene incrementato.Similarly, if i is equal to 0, only z is incremented; if i is equal to 1, only p is incremented. L'istruzione break finale non è strettamente necessaria, poiché il controllo esce dal corpo alla fine dell'istruzione composta, ma è incluso per coerenza.The final break statement is not strictly necessary, since control passes out of the body at the end of the compound statement, but it is included for consistency.

Una singola istruzione può contenere più etichette case, come illustrato nell'esempio seguente:A single statement can carry multiple case labels, as the following example shows:

case 'a' :  
case 'b' :  
case 'c' :  
case 'd' :  
case 'e' :  
case 'f' :  hexcvt(c);  

In questo esempio, se constant-expression è uguale a qualsiasi lettera tra 'a' e 'f', viene chiamata la funzione hexcvt.In this example, if constant-expression equals any letter between 'a' and 'f', the hexcvt function is called.

Sezione specifica MicrosoftMicrosoft Specific

Microsoft C non limita il numero di valori di etichette case che possono essere presenti in un'istruzione switch.Microsoft C does not limit the number of case values in a switch statement. Tale numero è limitato solo dalla memoria disponibile.The number is limited only by the available memory. ANSI C richiede che in un'istruzione switch siano consentite almeno 257 etichette case.ANSI C requires at least 257 case labels be allowed in a switch statement.

Per impostazione predefinita, in Microsoft C le estensioni Microsoft sono abilitate.The default for Microsoft C is that the Microsoft extensions are enabled. Utilizzare l'opzione del compilatore /Za per disabilitare queste estensioni.Use the /Za compiler option to disable these extensions.

Fine sezione specifica MicrosoftEND Microsoft Specific

Vedere ancheSee Also

Istruzione switch (C++)switch Statement (C++)