Tipos
- Irrestritos
- Restritos
Evitá-los
\pause É o comando goto
- Diminui a legibilidade
- Em alguns casos, pode ter ganho de desempenho
Permitem finalização diferente da usual
Desvios disciplinados e estruturados
Não entram em repetições nem desviam o fluxo para um lugar qualquer
\pause Comandos típicos
break;
– termina um bloco de laço mais internocontinue;
– pula o resto da iteração do laço mais internoreturn;
– sai do subprogramaexit;
– sai do programa
Exemplo com break;
S=0;
for(;;){ // lê um número inteiro natural
printf("n: ");
scanf("%d", &n);
if(n <= 0) break; // vai para o fim do laço e sai
s+=n;
}
Exemplo com continue;
S=0; i = 0;
while(i<10){ // soma 10 números naturais
printf("n: ");
scanf("%d", &n);
if(n < 0) continue; // volta para o início do laço
s+=n;
i++;
}
Exemplo com return
e com exit
void trata (int erro) {
if(erro==0){
printf("nada a tratar");
return; // interrompe função
}
if(erro<0){
printf("erro grave");
exit(1); // sai do programa
}
printf("erro tratado");
}
Escapes rotulados (Java/Ada) Exemplo
busca:
for(i=0; i<arrayOfInts.length; i++) {
for(j=0; j<arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
encontrado = true;
break busca;
}
}
}
Escapes rotulados (Java/Ada) Exemplo genérico
Loop_externo:
for(;;) {
Loop_interno:
for(;;){
/* comandos */
break Loop_interno;
/* comandos */
continue Loop_externo;
}
}