¿Cuál es el significado de la advertencia de GCC "el valor de la etiqueta del caso excede el valor máximo para el tipo"?

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

Pregunta

Mi código se ve así:

char * decode_input(char ch)
{
        switch(ch) {
                case 'g':
                        return "get";
                        break;
                case KEY_F(9):
                        return "quit";
                        break;
                default:
                        return "unknown";
                        break;
        }
}

¿Alguna pista?

¿Fue útil?

Solución

Un carácter es un número entre -128 y 127. KEY_F (9) probablemente es un valor fuera de ese rango.

Uso:

  • unsigned char, o
  • int o
  • (char) KEY_F (9)

O incluso mejor, use un depurador y determine sizeof (KEY_F (9)) para asegurarse de que sea un byte y no un corto.

Otros consejos

Bueno, KEY_F (9) sería 273 (ver curses.h) que excede el rango de char (-128,127).

En este caso, KEY_F (9) está evaluando algo fuera del rango de char . La instrucción switch supone que debido a que su argumento es un char , todas las etiquetas de mayúsculas y minúsculas también lo serán. Cambiar el switch para leer switch ((unsigned int) ch) lo curará.

Parece que KEY_F (9) debe evaluar algo que está fuera del rango de un carácter.

Lo que todos los demás dijeron sobre el rango de char.

Recuerdo esto de mis primeros días escribiendo C ... probablemente estás llamando a decode_input desde un bucle, ¿verdad? Si el usuario presiona algo como F9, obtendrá dos bytes en el búfer del teclado, y el primer byte será 0x0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top