Qual é o significado do aviso GCC “valor do rótulo caso excede o valor máximo para o tipo”?

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

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?

Foi útil?

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

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