O `Break 'funciona apenas para` para `,` while`, `do-while`,` switch' e para `se 'declarações?
Pergunta
Suponha que eu tenho um if
declaração dentro de um for
ciclo:
for( ; ; )
{
if( )
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
Agora, o será o break
declaração fazer com que o compilador saia do for
loop ou só sairá do corpo de if
Uma vez que a condição no if
fica satisfeito?
Solução
o break
a declaração sai de o anexo mais próximo ciclo ou trocar declaração.
break
não sai de um if
declaração, mas o mais próximo loop
ou switch
que contém isso if
declaração. A razão para não sair de um if
a declaração é porque é comumente usada para decidir se você deseja sair do loop
.
Curiosamente, um interruptor de telefone se comportou mal porque a empresa que inventou C fez exatamente este bug. Eles queriam sair de um if
declaração e eles esqueceram que iria sair de todo o for
declaração.
Outras dicas
Vai sair do for
ciclo. UMA break
A declaração só tem um efeito nos loops (do
, for
, while
) e switch
declarações (para sair de um case
).
De C99 padrão, Seção 6.8.6.3:
Restrições
Uma declaração de quebra aparecerá apenas em ou como corpo de troca ou corpo de loop.
Semântica
Uma declaração de interrupção encerra a execução do menor comutador de anexo ou da declaração de iteração.
break
Não sairá de uma cláusula IF, mas a cláusula de loop ou interruptor mais próxima. Além disso, uma cláusula se não é chamada de "loop" porque nunca repete seu conteúdo.
A declaração de interrupção entra em vigor apenas nos loops e na cláusula de troca. De qualquer forma, sairá do loop fechado mais próximo. É uma boa prática usar uma interrupção condicional, ou seja, quebra de alguma instrução IF. Se você quiser sair de todos os loops ou algum loop, você pode usar a declaração GoTo. Por exemplo:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
A declaração de interrupção não quebrará nenhuma instrução IF ou então. Se você estiver usando a declaração de quebra, ele sai principalmente do loop mais próximo (para loop, enquanto loop, faça o loop e a caixa de interruptor)
A declaração de quebra não tem utilidade na decisão fazendo declarações. É usado apenas em loops, quando você deseja forçar a rescisão do loop e continuar a execução a partir da declaração após o loop. Não há dúvida de "a declaração interrompida fará com que o controle saia da declaração IF se a condição for verdadeira", porque independentemente da declaração de quebra, o controle sairá da declaração IF se a condição for verdadeira e quando seu corpo for executado. A instrução IF não é um loop. Não é expirado ou expirado apenas uma vez. Portanto, absolutamente não faz sentido fazer uma pausa dentro do corpo de If.