instrucción switch (C++)
Permite la selección entre varias secciones de código, dependiendo del valor de una expresión entera.
switch ( expression )
case constant-expression : statement
[default : statement]
Comentarios
La expresión debe ser de tipo entero o de un tipo de clase para el que haya una conversión inequívoca el tipo entero.La promoción completa se realiza como se describe en promociones enteras.
El cuerpo de instrucción de switch consiste en una serie de etiquetas de mayúsculas/minúsculas y una etiqueta opcional de predeterminado .Que dos expresiones constantes en las instrucciones de mayúsculas/minúsculas pueden evaluar el mismo valor.La etiqueta de predeterminado sólo puede aparecer una vez.Las instrucciones etiquetadas no son requisitos sintácticos, pero la instrucción de switch no tiene sentido sin ellos.La instrucción predeterminada no necesita alcanzado en el fin; puede aparecer en cualquier parte del cuerpo de la instrucción switch.Un caso o una etiqueta predeterminada sólo puede aparecer en una instrucción switch.
La expresión constante en cada etiqueta de mayúsculas/minúsculas se convierte al tipo de expresión y en comparación con la expresión de igualdad.El Control pasa a la instrucción cuyas coincidencias de la expresión constante de mayúsculas/minúsculasel valor de la expresión.el comportamiento resultante se muestra en la tabla siguiente.
Comportamiento de la instrucción switch
Condition |
Acción |
---|---|
Coincidencias convierten de valor que de expresiones que controla ascendida. |
El Control se transfiere a la instrucción que sigue a esa etiqueta. |
Ninguna de las constantes constantes en las etiquetas de mayúsculas/minúsculas ; una etiqueta de predeterminado está presente. |
El Control se transfiere a la etiqueta de predeterminado . |
Ninguna de las constantes constantes en las etiquetas de mayúsculas/minúsculas ; la etiqueta de predeterminado no está presente. |
El Control se transfiere a la instrucción después de la instrucción de switch . |
Si se encuentra una expresión coincidente, el control no es impedido por mayúsculas/minúsculas subsiguiente o etiquetas de predeterminado .La instrucción de Inter se utiliza para detener la ejecución y transferir el control a la instrucción después de la instrucción de switch .Sin una instrucción de Inter , cada instrucción de la etiqueta coincidente de mayúsculas/minúsculas al final de switch, incluidos predeterminado, se ejecuta.Por ejemplo:
// 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) );
}
En el ejemplo anterior, se incrementa capa si c es Auna mayúscula.La instrucción de break después de que capa++ finalice la ejecución del cuerpo y control de instrucción de switch pasa a while el bucle.Sin la instrucción de break , lettera y nota también se incrementan.Un propósito similar es atendido por la instrucción de break para case 'a'.Si c es aen minúsculas, se incrementa lettera y la instrucción de break finaliza el cuerpo de instrucción de switch .si c no es a o A, se ejecuta la instrucción de default .
Un bloque interno de una instrucción de switch puede contener definiciones con inicializaciones mientras se, es decir no pasa por todas las posibles rutas de ejecución.Los nombres proporcionados mediante estas declaraciones tienen ámbito local.Por ejemplo:
// 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;
}
}
Una instrucción de switch puede estar anidada.En casos como éste, mayúsculas/minúsculas o las etiquetas de predeterminado asociar con la instrucción más cercana de switch que los agrega.
Específicos de Microsoft
Microsoft c no limita el número de valores de caso en una instrucción de switch .El número está limitado por la memoria disponible.ANSI C requiere al menos 257 etiquetas del caso se permite en una instrucción de switch .
El valor predeterminado para Microsoft c es que las extensiones de Microsoft están habilitadas.Utilice la opción de compilador /Za de deshabilitar estas extensiones.