clausula-switch-nao-funciona
Tabela de conteúdos
O estranho caso do case que não funciona
Veja o seguinte código em C e me diga qual seria o resultado impresso na serial:
Serial.begin(9600); uint8_t variable = 1; switch (variable) { case 0: Serial.println("zero"); uint8_t myRandomVar = 0; break; case 1: Serial.println("um"); break; default: Serial.println("Somente os valores 0 e 1 são aceitos"); break; }
Se a sua resposta foi 'um' você está enganado!! Na realidade não vai imprimir nada.
O que acontece?
Um 'case' não define um escopo e declarar uma variável alí causa resultados inesperados durante a execução do código. Infelizmente o compilador 'avr-gcc' não parece avisar desse conflito e o problema só vai aparecer na execução, quando os 'cases' subsequentes àquele onde foi feita a declaração não funcionarem.
Solução
Envolver o código do case entre chaves {}. Assim o código ficaria:
Serial.begin(9600); uint8_t variable = 1; switch (variable) { case 0: { Serial.println("zero"); uint8_t myRandomVar = 0; break; } case 1: Serial.println("um"); break; default: Serial.println("Somente os valores 0 e 1 são aceitos"); break; }
Agora sim! O resultado será 'um“ enviado para a porta serial.
Outra opção, é obviamente não declarar variáveis dentro de um 'case. Quando necessário declare antes da clausula ''switch' !
clausula-switch-nao-funciona.txt · Última modificação: por jjo
