В чем смысл предупреждения GCC: «Значение метки регистра превышает максимальное значение для типа»?

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

Вопрос

Мой код выглядит следующим образом:

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

Есть какие-нибудь подсказки?

Это было полезно?

Решение

Символ — это число от -128 до 127.KEY_F(9), вероятно, находится за пределами этого диапазона.

Использовать:

  • беззнаковый символ или
  • интервал или
  • (символ) KEY_F(9)

Или, что еще лучше, используйте отладчик и определите sizeof(KEY_F(9)), чтобы убедиться, что это байт, а не короткий.

Другие советы

Ну, KEY_F (9) будет 273 (см. curses.h), что превышает диапазон char (-128,127).

В этом случае KEY_F (9) оценивает что-то вне диапазона char . Оператор switch предполагает, что, поскольку его аргумент является char , все метки регистра также будут. Изменение switch на чтение switch ((unsigned int) ch) вылечит его.

Похоже, что KEY_F (9) должен вычислять что-то, что находится вне диапазона символа.

Что все остальные говорили о диапазоне для символа.

Я помню это с первых дней написания C ... вы, вероятно, вызываете decode_input из цикла, верно? Если пользователь нажимает что-то вроде F9, вы получите два байта в буфере клавиатуры - и первый байт будет 0x0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top