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 sentancias case: 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í case 0: 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
#include <stdio.h> void func(int x) { printf("func(%d): ", x); switch(x) { case 1: printf("caso 1, "); case 2: printf("caso 2, "); case 3: printf("caso 3.\n"); break; case 4: printf("caso 4, "); case 5: printf("caso 5, "); default: printf("predeterminado.\n"); } } int main(void) { for(int i = 1; i < 10; ++i) func(i); }
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
|