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 ;?
-
06-07-2019 - |
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?
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.