2010-04-02 17 views
28

Supongamos, que tiene declaración if dentro de un bucle for:¿`break 'funciona solo para` for`, `while`,` do-while`, `switch' y para declaraciones` if`?

for(; ;) 
{ 
    if() 
    { 
    printf(" inside if"); 
    break; 
    }//if   

    printf("inside for"); 
}//for 

Ahora, será la declaración break que el compilador para salir del bucle for o piensa sólo salen del cuerpo de if una vez que el condición en el if se convierte en satisfecho?

+1

FYI, 'if' no es un bucle. –

+1

@CoolGuy ni 'switch' –

+0

@ M.M Lo sé. El OP había dicho "_'if' loop_" en [la revisión anterior] (http://stackoverflow.com/revisions/2565659/2) y estaba corrigiendo eso. –

Respuesta

63

Los break rompe declaración fuera de que encierra el más cercano bucle o interruptor comunicado.

break no salir de un estado de if, pero el loop más cercana o switch que contiene ese if comunicado. La razón por la que no se rompe una declaración if es porque se usa comúnmente para decidir si desea salir del loop.

Curiosamente, un interruptor de teléfono se comportó mal porque la compañía que inventó C made exactly this bug. Quisieron salir de una declaración if y olvidaron que saldría de toda la declaración for.

+0

gracias Sr. y ese fue un ejemplo muy informativo. Lo tengo claro ahora. – avi

+2

[citación necesitada] :) – erelender

+1

Era una noticia hace 20 años. antes, puedes buscarlo en Google lo mejor que pueda, quizás comenzando con cosas como error de error de software ess. –

16

Saldrá del lazo for. Una instrucción break solo tiene un efecto en los bucles (do, for, while) y en las declaraciones switch (para salir de un case).

Desde el C99 standard, sección 6.8.6.3:

Restricciones

Una declaración de la rotura deberá aparecer sólo en o como un cuerpo de interruptor o cuerpo del bucle.

Semántica

una sentencia break termina la ejecución del interruptor de cerramiento más pequeño o declaración iteración.

+0

Gracias, Sr. Mark – avi

13

break no saldrá de una cláusula if, sino de la cláusula loop o switch más cercana. Además, una cláusula if no se llama "bucle" porque nunca repite su contenido.

+0

Gracias Sr. Matti. – avi

2

La declaración de ruptura solo tiene efecto en los bucles y en la cláusula de conmutación. En cualquier caso, saldrá del bucle circundante más cercano. Es una buena práctica usar un salto condicional, es decir, un corte incluido por alguna instrucción if. Si quiere salir de todos los bucles o de algún bucle, puede usar la instrucción goto. Por ejemplo:

while(true) { 
    while (some_condition) { 
      if (some_condition) 
       goto label; 
    } 
} 
label: // do something here 
+1

para casi todos los problemas goto puede ser reemplazado por break y continue statement. Las instrucciones goto tienden a crear código "sphegetti" – kapil

Cuestiones relacionadas