Was ist die Bedeutung der GCC Warnung „case-Label Wert Maximalwert für Typen überschreitet“?

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

Frage

Mein Code sieht wie folgt aus:

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

Irgendwelche Hinweise?

War es hilfreich?

Lösung

A char eine Zahl zwischen -128 und 127. KEY_F (9), ist wohl ein Wert außerhalb dieses Bereichs.

Verwendung:

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

Oder noch besser, einen Debugger und bestimmt sizeof (KEY_F (9)), um sicherzustellen, dass es ein Byte und keine kurz.

Andere Tipps

Nun, KEY_F (9) wäre 273 (siehe curses.h), die den Bereich von Zeichen überschreitet (-128.127).

In diesem Fall wird KEY_F(9) außerhalb des Bereichs von char etwas bewerten. Die switch Erklärung geht davon aus, dass, weil ihr Argument ist ein char, dass alle Fall Etiketten auch sein wird. Ändern des switch switch((unsigned int)ch) lesen wird es heilen.

Es sieht aus wie KEY_F (9), um etwas bewerten müssen, die außerhalb der Reichweite eines char ist.

Was alle anderen gesagt in Bezug auf den Bereich für char.

Ich erinnere mich aus meiner frühen Tagen schriftlich C ... du bist wahrscheinlich decode_input von einer Schleife aufrufen, nicht wahr? Wenn der Benutzer etwas wie F9 drückt, Sie gehen zwei Bytes in dem Tastaturpuffer bekommen -. Und das erste Byte 0x0 sein

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top