Pregunta Error de compilación con: cambiar, "expresión esperada antes"


Corte a la caza. He recreado mi problema, ya que es bastante auto explicativo.

esto se cumple sin error:

switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

esto compila con error y solo le falta el NSLog ():

switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

arroja un error al compilar "Expresión esperada antes de 'NSString'"

¿Me estoy perdiendo de algo?


75
2018-01-10 11:25


origen


Respuestas:


En C normal, debe encerrar esto entre corchetes en ambos casos. Sospecho que esto puede solucionar su problema:

case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

Ver esta pregunta SO para más información.

Otra forma de evitar este problema es colocar una declaración entre la etiqueta del caso y la primera declaración como lo hizo en su ejemplo de trabajo anterior. Vea los comentarios y la respuesta de Quinn Taylor para más información.


155
2018-01-10 11:28



No puede declarar una variable como primero declaración en una case sin corchetes, y en muchos otros contextos en lenguajes basados ​​en C. Ver Declaración de variables dentro de una instrucción switch para detalles.


20
2018-01-10 16:08



case 0: {
    Loading my nib file;
    break; 
}
case 1: {
    Loading another nib file;
    break; 
}
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:

2
2018-01-20 06:44