Что означает предупреждение GCC «значение метки регистра превышает максимальное значение для типа»? - PullRequest
7 голосов
/ 18 июня 2009

Мой код выглядит так:

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

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

Ответы [ 5 ]

8 голосов
/ 18 июня 2009

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

8 голосов
/ 18 июня 2009

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

Использование:

  • unsigned char или
  • int или
  • (символ) KEY_F (9)

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

4 голосов
/ 18 июня 2009

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

0 голосов
/ 18 июня 2009

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

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

0 голосов
/ 18 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...