Qual è il significato dell'avviso GCC & # 8220; il valore dell'etichetta del caso supera il valore massimo per il tipo & # 8221 ;?

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

Domanda

Il mio codice è simile al seguente:

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

Qualche indizio?

È stato utile?

Soluzione

Un carattere è un numero compreso tra -128 e 127. KEY_F (9) probabilmente è un valore al di fuori di tale intervallo.

Usa:

  • carattere non firmato o
  • int o
  • (char) KEY_F (9)

O ancora meglio, usa un debugger e determina sizeof (KEY_F (9)) per assicurarti che sia un byte e non un corto.

Altri suggerimenti

Bene, KEY_F (9) sarebbe 273 (vedi curses.h) che supera l'intervallo di caratteri (-128,127).

In questo caso, KEY_F (9) sta valutando qualcosa al di fuori dell'intervallo di char . L'istruzione switch presuppone che, poiché il suo argomento è un char , lo saranno anche tutte le etichette dei casi. Cambiando l'opzione in switch ((unsigned int) ch) si risolverà.

Sembra che KEY_F (9) debba valutare qualcosa che non rientra nell'intervallo di un carattere.

Ciò che tutti gli altri hanno detto riguardo alla gamma di caratteri.

Lo ricordo dai miei primi tempi scrivendo C ... probabilmente stai chiamando decode_input da un loop, giusto? Se l'utente preme qualcosa come F9, otterrai due byte nel buffer della tastiera e il primo byte sarà 0x0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top