Sentencia switch
Ejecuta código según el valor de un argumento integral.
Se utiliza cuando una o varias de las muchas ramas del código necesitan ser ejecutadas de acuerdo a un valor integral.
Contenido |
[editar]Sintaxis
switch ( expresión) sentancia | |||||||||
expresión | - | cualquier expresión de tipo entero (char, entero con o sin signo, o enumeración) |
sentancia | - | cualquier sentencia (típicamente una sentencia compuesta). Se permiten etiquetas en las sentanciascase: y default: . Y la sentencia break; tiene un significado especial. |
case expresión_constante: sentancia | (1) | ||||||||
default : sentancia | (2) | ||||||||
expresión_constante | - | cualquier expresión constante entera |
[editar]Explicación
El cuerpo de una sentencia switch puede tener un número arbitrario de etiquetas case:
, siempre y cuando los valores de todas las expresiónes_constantes sean únicos (después de la conversión al tipo promovido de expresión). Como máximo una etiqueta default:
puede estar presente (aunque las sentencias de los switches anidados pueden usar sus propias etiquetas default:
o tener etiquetas case:
cuyas constantes son idénticas a las utilizadas en el switch adjunto).
Si la expresión evalúa al valor que es igual al valor de una de las expresiones_constantes después de la conversión al tipo promovido de expresión, entonces el control se transfiere a la sentencia que está etiquetada con esa expresión_constante.
Si la expresión se evalúa a un valor que no coincide con ninguna de las etiquetas case:
, y la etiqueta default:
está presente, el control se transfiere a la sentencia etiquetada con la etiqueta default:
.
Si la expresión se evalúa a un valor que no coincide con ninguna de las etiquetas case:
, y la etiqueta default:
no está presente, no se ejecutará ninguno de los elementos del switch.
La sentencia break, cuando se encuentra en cualquier parte en la sentancia, sale de la sentencia switch:
Como con todas las demás sentencias de selección e iteración, la sentencia switch establece un alcance del bloque: cualquier identificador introducido en la expresión sale del alcance de aplicación después de la sentancia. Si un VLA u otro identificador de tipo variablemente modificado tiene una etiqueta switch(expr){int i =4;// no es un VLA; se puede declarar aquí f(i);// nunca es llamado// int a[i]; // error: el VLA no puede ser declarado aquícase0: i =17;default:;int a[i];// se puede declarar VLA aquíprintf("%d\n", i);// imprime 17 si expr == 0, imprime un valor no definido de lo contrario} | (desde C99) |
[editar]Términos clave
[editar]Ejemplo
Salida:
func(1): caso 1, caso 2, caso 3. func(2): caso 2, caso 3. func(3): caso 3. func(4): caso 4, caso 5, predeterminado. func(5): caso 5, predeterminado. func(6): predeterminado. func(7): predeterminado. func(8): predeterminado. func(9): predeterminado.
[editar]Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 6.8.4.2 The switch statement (p: 149-150)
- Standard C99 (ISO/IEC 9899:1999):
- 6.8.4.2 The switch statement (p: 134-135)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 3.6.4.2 The switch statement
[editar]Véase también
Documentación de C++ para Sentencia switch |