instruction switch (C++)
Autorise la sélection parmi plusieurs sections de code, en fonction de la valeur d'une expression complète.
switch ( expression )
case constant-expression : statement
[default : statement]
Notes
L'expression doit être de type intégral ou d'un type de classe pour lequel il existe une conversion ambiguë en type entier.La promotion de type intégral est exécutée comme décrit dans promotions intégrales.
Le corps d'instruction d' switch se compose d'une série de noms d' événement et d'une étiquette facultative de valeur par défaut .Aucune deux expressions constantes dans les instructions d' événement ne peuvent correspondre à la même valeur.Le nom de valeur par défaut peut apparaître qu'une seule fois.Les instructions étiquetées ne sont pas des exigences syntaxiques, mais l'instruction d' switch est sans importance sans elles.L'instruction par défaut n'a pas besoin est-à-dire à la fin ; elle peut apparaître n'importe où dans le corps de l'instruction switch.Un cas ou un nom par défaut peuvent seulement apparaître dans une instruction switch.
L'expression constante dans chaque nom d' événement est convertie dans le type d'expression et comparées à l'expression d'égalité.Le contrôle passe à l'instruction de*l'expression constante * d' événementcorrespond à la valeur de l'expression.Le comportement résultant est illustré dans le tableau suivant.
comportement d'instruction switch
Condition |
Action |
---|---|
Correspondances converties de valeur qui de l'expression de contrôle promue. |
Le contrôle est transféré à l'instruction qui suit ce nom. |
Aucune des constantes ne correspond aux constantes dans les noms d' événement ; un nom de valeur par défaut est présent. |
le contrôle est transféré au nom de valeur par défaut . |
Aucune des constantes ne correspond aux constantes dans les noms d' événement ; le nom de valeur par défaut n'est pas présent. |
Le contrôle est transféré à l'instruction située après l'instruction d' switch . |
Si une expression correspondante est trouvée, le contrôle n'est pas empêché par événement suivant ou des noms de valeur par défaut .L'instruction de saut est utilisée pour arrêter le contrôle d'exécution et de migration à l'instruction située après l'instruction d' switch .Sans instruction de saut , chaque instruction du nom mis en correspondance d' événement à la fin de switch, y compris valeur par défaut, est exécutée.Par exemple :
// switch_statement1.cpp
#include <stdio.h>
int main() {
char *buffer = "Any character stream";
int capa, lettera, nota;
char c;
capa = lettera = nota = 0;
while ( c = *buffer++ ) // Walks buffer until NULL
{
switch ( c )
{
case 'A':
capa++;
break;
case 'a':
lettera++;
break;
default:
nota++;
}
}
printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
capa, lettera, (capa + lettera + nota) );
}
dans l'exemple ci-dessus, capa est incrémenté si c est Amajuscule.L'instruction d' break après qu' capa++ arrête l'exécution des opérations de corps et de contrôle d'instruction d' switch à while bouclent.sans instruction d' break , lettera et nota seraient également incrémentés.Un rôle similaire est atteint par l'instruction d' break pour case 'a'.Si c est aminuscules, lettera est incrémenté et l'instruction d' break termine le corps d'instruction d' switch .si c n'est pas a ou A, l'instruction d' default est exécutée.
Un bloc interne d'une instruction d' switch peut contenir des définitions avec les initialisations tant qu'elles sont accessibles - c. autrement dit., non sauté par tous les chemins d'exécution possibles.Les noms présentés à l'aide de ces déclarations ont une portée locale.Par exemple :
// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
switch( tolower( *argv[1] ) )
{
// Error. Unreachable declaration.
char szChEntered[] = "Character entered was: ";
case 'a' :
{
// Declaration of szChEntered OK. Local scope.
char szChEntered[] = "Character entered was: ";
cout << szChEntered << "a\n";
}
break;
case 'b' :
// Value of szChEntered undefined.
cout << szChEntered << "b\n";
break;
default:
// Value of szChEntered undefined.
cout << szChEntered << "neither a nor b\n";
break;
}
}
une instruction d' switch peut être imbriquée.Dans ce cas, événement ou les noms de valeur par défaut s'associent à l'instruction d' switch la plus proche qui les entoure.
Spécifique à Microsoft
Microsoft C ne limite pas le nombre de valeurs de cas dans une instruction d' switch .Le nombre est limité uniquement par la mémoire disponible.C ANSI requiert au moins 257 étiquettes case est autorisé dans une instruction d' switch .
la valeur par défaut pour Microsoft C est que les extensions Microsoft sont activées.utilisez l'option du compilateur de /Za de désactiver ces extensions.