O `Break 'funciona apenas para` para `,` while`, `do-while`,` switch' e para `se 'declarações?

StackOverflow https://stackoverflow.com/questions/2565659

  •  23-09-2019
  •  | 
  •  

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top