Quelle est la signification de l’avertissement GCC & # 8220; la valeur de l’étiquette de casse dépasse la valeur maximale pour le type & # 8221 ;?

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

Question

Mon code ressemble à ceci:

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

Des indices?

Était-ce utile?

La solution

Un caractère est un nombre compris entre -128 et 127. KEY_F (9) est probablement une valeur en dehors de cette plage.

Utiliser:

  • caractère non signé ou
  • int ou
  • (char) KEY_F (9)

Ou mieux encore, utilisez un débogueur et déterminez sizeof (KEY_F (9)) pour vous assurer qu'il s'agit d'un octet et non d'un court.

Autres conseils

Eh bien, KEY_F (9) serait 273 (voir curses.h), ce qui dépasse la plage de char (-128,127).

Dans ce cas, KEY_F (9) évalue quelque chose en dehors de la plage de char . L'instruction switch suppose que, comme son argument est un char , toutes les étiquettes de casse le seront également. Changer le commutateur pour lire le commutateur ((unsigned int) ch) résoudra le problème.

Il semble que KEY_F (9) doit s’évaluer en dehors de la plage d’un caractère.

Ce que tout le monde a dit à propos de la plage de caractères.

Je me souviens de cela depuis mes débuts en écrivant C ... vous appelez probablement decode_input depuis une boucle, n'est-ce pas? Si l'utilisateur appuie sur quelque chose comme F9, vous obtiendrez deux octets dans la mémoire tampon du clavier - et le premier octet sera 0x0.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top