Qual é o significado do aviso GCC “valor do rótulo caso excede o valor máximo para o tipo”?
-
06-07-2019 - |
Pergunta
Os meus olhares código como este:
char * decode_input(char ch)
{
switch(ch) {
case 'g':
return "get";
break;
case KEY_F(9):
return "quit";
break;
default:
return "unknown";
break;
}
}
Qualquer pistas?
Solução
Um char é um número entre -128 e 127. KEY_F (9) é provavelmente um valor fora do intervalo.
Use:
- unsigned char, ou
- int, ou
- (char) KEY_F (9)
Ou melhor ainda, usar um depurador e determinar sizeof (KEY_F (9)) para se certificar de que é um byte e não um curto.
Outras dicas
Bem, KEY_F (9) seria 273 (ver curses.h) que excede a gama de char (-128.127).
Neste caso, KEY_F(9)
está avaliando a algo fora do intervalo de char
. A declaração switch
está assumindo que porque seu argumento é um char
, que todas as etiquetas de caso também será. Alterar o switch
para ler switch((unsigned int)ch)
vai curá-lo.
Parece que KEY_F (9) deve ser avaliada como algo que está fora do alcance de um char.
O que todo mundo disse a respeito do intervalo para Char.
Eu me lembro de isto de meus primeiros dias escrevendo C ... provavelmente você está chamando decode_input de um loop, certo? Se o usuário pressiona algo como F9, você está indo para obter dois bytes no buffer do teclado - e o primeiro byte será 0x0
.