switch statement examples c switch-statement

statement - C llaves de interruptor después de cada caso



switch case java (5)

En un control de flujo de C switch-case , se requiere poner llaves {} después de un case si las variables se están definiendo en ese bloque.

¿Es una mala práctica poner llaves después de cada case , independientemente de la declaración de la variable?

Por ejemplo:

switch(i) { case 1: { int j = 4; ...code... } break; case 2: { //No variable being declared! Brace OK? ...code... } break; }


Ciertamente no es inválido usar llaves en cada bloque de casos, y tampoco es necesariamente un mal estilo. Si tiene algunos bloques de casos con llaves debido a declaraciones de variables, agregar llaves a los demás puede hacer que el estilo de codificación sea más consistente.

Habiendo dicho eso, probablemente no sea una buena idea declarar las variables dentro de los bloques de casos en C. Si bien eso podría ser permitido por tu compilador, probablemente haya una solución más limpia. Los bloques de casos mutuamente exclusivos pueden compartir varias variables temporales comunes, o puede encontrar que sus bloques de casos funcionarían mejor como funciones auxiliares.


Considero que es un mal estilo usar llaves en cada case . Los casos son etiquetas en C, similares a las etiquetas goto . Y en el lenguaje C actual, puede declarar variables en cada case (o en cualquier lugar que desee) sin introducir nuevos bloques, aunque algunas personas (yo incluido) también consideran ese estilo malo.


En general, es una mala práctica saltar sobre la inicialización de una variable, ya sea con goto o switch . Esto es lo que sucede cuando no tienes los bloques por case .

Incluso hay un caso en C99 donde saltarse la inicialización es ilegal, a saber, matrices de longitud variable. Deben ser "construidos" de manera similar a los no-POD en C ++, su inicialización es necesaria para el acceso de la variable más tarde. Entonces, en este caso, debe usar la instrucción de bloque.


Las llaves se pueden usar en todas las declaraciones de casos sin penalización de velocidad, debido a la forma en que los compiladores optimizan el código. Entonces, es solo el estilo y la preferencia del codificador.

  • El uso más preferido es no usar llaves, aunque el uso de ellas en todos los casos durante un desarrollo activo puede ser más fácil de hacer algunas adiciones en el código de vez en cuando.

  • Son solo los Easthetics; porque una declaración ''caso'' no necesita solo un comando, sino que recorrerá el código ya que funciona como una etiqueta. Entonces, los bloques no son necesarios y no son inválidos.

  • En ''caso es con variables; Las llaves se usan por sí solas, para crear contextos para variables, y tiene mucho sentido usarlas. Algunos compiladores en diferentes plataformas muestran comportamientos diferentes si no están incluidos.


Solo para agregar un punto menor, muchos editores e IDE permiten que los bloques se colapsen y / o sangren automáticamente y varios le permiten saltar al corsé coincidente. Personalmente, no conozco ninguno que le permita saltar de un descanso al emparejamiento. declaración de caso.

Al depurar, o volver a factorizar, a otras personas (o incluso a las suyas después de unos meses), código que contiene sentencias de casos complejos, la capacidad de colapsar secciones del código y saltar a casos coincidentes es invaluable, especialmente si el código contiene variaciones de sangría

Dicho esto, casi siempre es un buen consejo evitar las declaraciones complejas de casos como la peste.