27.07
2023
Apesar de não ser único das linguagens C e C++, a forma que a estrutura de controle de fluxo switch funciona é um pouco diferente de quando aprendemos algorítmos, ou quando aprendemos linguagens mais simples. Este post vai explicar como exatamente funciona o switch, e por que é necessário utilizar o break no switch? Será que é?
Sintaxe Básica
Primeiro a síntaxe básica do switch:
switch (expr) {
case const-expr: statement
...
default: statement
}
Note que não existe nada diretamente relacionado com o break. Isso mesmo, break não é necessário nem obrigatório. Porém para facilitar o ensino, muitos cursos apontam a necessidade do break, normalmente porque boa parte de quem aprende C está vindo de outra linguagem.
Exemplos
O break é utilizado no switch, tal qual em outras estruturas de loop, para interromper o fluxo de execução, encaminhando-o para fora da estrutura. O código abaixo ilustra como funciona um switch sem break:
#include <stdio.h>
int main() {
char c = 'b';
switch (c) {
case 'a':
printf("a\n");
case 'b':
printf("a or b\n");
case 'c':
printf("a or b or c\n");
}
}
O resultado será:
a or b
a or b or c
Ou seja, o switch irá executar do case ‘b’ em diante, mesmo que isso implique em executar o código que está abaixo do case ‘c’.
Normalmente utiliza-se break para evitar a execução do código abaixo do case ‘c’. Mas nem sempre é o desejado. O código abaixo ilustra esta situação:
#include <stdio.h>
int main() {
printf("*** MENU PRINCIPAL ***\n");
printf("A. Adicionar novo item\n");
printf("B. Pesquisar itens\n");
printf("C. Consultar item\n");
printf("D. Apagar itens\n");
printf("Digite opcao: ");
char opt = getchar();
switch (opt) {
case 'a':
case 'A':
printf("\nAdicionando novo item\n\n");
break;
case 'b':
case 'B':
printf("\nPesquisando itens\n\n");
break;
case 'c':
case 'C':
printf("\nConsultando item\n\n");
break;
case 'd':
case 'D':
printf("\nApagando item\n\n");
break;
default:
printf("\nOpcao invalida!\n\n");
}
}
O código exibe um menu, e aceita tanto caracteres maiúsculos como minúsculos. Note o break a cada dois cases, para evitar que a escolha de um comando execute as funções referentes a outros comandos. Note também que a última opção, default, não necessita de break.
Em Resumo
Apesar de muita gente aprender que o break é obrigatório, na linguagem C não é. E a construção do exemplo acima é praticamente unânime em times de desenvolvimento.
Portanto, para dar manutenção em código C profissionalmente, e para gerar código C mais limpo e de fácil manutenção, conhecer o real funcionamento do switch é essencial.