while uso switch sentencia resueltos lenguaje instruccion ejemplos ejemplo definicion con objective-c c variables switch-statement declaration

objective-c - uso - switch en c con char



Declaración de variables dentro de una instrucción switch (3)

De hecho, puede declarar variables dentro de un interruptor si lo hace de acuerdo con la sintaxis del idioma. Está recibiendo un error porque " case 0: " es una etiqueta, y en C es ilegal tener una declaración como la primera declaración después de una etiqueta: tenga en cuenta que el compilador espera una expresión , como una llamada a un método, asignación normal, etc. (Por extraño que pueda ser, esa es la regla).

Cuando coloca el NSLog () primero, evitó esta limitación. Puede encerrar el contenido de un caso en {} llaves para introducir un bloque de alcance, o puede mover la declaración de variable fuera del interruptor. Lo que elija es una cuestión de preferencia personal. Solo tenga en cuenta que una variable declarada en {} llaves solo es válida dentro de ese alcance, por lo que cualquier otro código que la use también debe aparecer dentro de esas llaves.

Editar:

Por cierto, esta peculiaridad no es tan poco común como podrías pensar. En C y Java, también es ilegal usar una declaración de variable local como la declaración solitaria (que significa "no rodeada de llaves" en un bucle for , while , o do , o incluso en cláusulas if y else . (De hecho, esto es cubierto en el rompecabezas # 55 de "Java Puzzlers" , que recomiendo encarecidamente). Creo que generalmente no escribimos esos errores para empezar porque tiene poco sentido declarar una variable como la única declaración en dichos contextos. sin embargo, algunas personas omiten las llaves ya que la declaración de ruptura es la declaración crítica para el flujo de control.

Para ver el ajuste del compilador, copie este fragmento horrible e inútil en su código C (Objetivo):

if (1) int i; else int i; for (int answer = 1; answer <= 42; answer ++) int i; while (1) int i; do int i; while (1);

Otra razón más para usar {} llaves para delimitar el cuerpo de tales construcciones. :-)

Esta pregunta ya tiene una respuesta aquí:

Vi algunas respuestas a este problema, y ​​lo entiendo: no puede declarar y asignar variables dentro de un switch . Pero me pregunto si lo siguiente es correcto al arrojar un error que dice

error: expresión esperada antes de ''int''

Código:

switch (i) { case 0: int j = 1; break; }

¿Por qué poner una llamada a NSLog() antes de que no NSLog() errores?

switch (i) { case 0: NSLog(@"wtf"); int j = 1; break; }


Me he encontrado con este problema anteriormente, y la conclusión fue que simplemente colocaste el código dentro de un bloque.

switch (i) { case 0: { int j = 1; break; } }


Otra solución simple que uso es agregar una expresión vacía (punto y coma) antes de la declaración. Esto evita limitar el alcance de la variable a un bloque de código (o tener algunos enunciados de caso con bloques de código y algunos sin).

switch (i) { case 0:; int j = 1; break; }