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)는 아마도 그 범위를 벗어난 값 일 것입니다.

사용:

  • 서명되지 않은 숯, 또는
  • int, 또는
  • (char) key_f (9)

또는 더 나은 것은 디버거를 사용하고 크기를 결정하여 (key_f (9))를 결정하여 바이트가 짧지 않은지 확인하십시오.

다른 팁

key_f (9)는 숯 (-128,127)의 범위를 초과하는 273 (Curses.h 참조)입니다.

이 경우 KEY_F(9) 범위 외부의 무언가를 평가하고 있습니다 char. 그만큼 switch 진술은 그 주장이 a char, 모든 케이스 레이블도 있습니다. 변경 switch 읽다 switch((unsigned int)ch) 그것을 치료할 것입니다.

key_f (9)는 숯의 범위를 벗어난 것으로 평가해야합니다.

Char의 범위에 관해 다른 모든 사람들이 말한 것.

나는 초기부터 C를 쓰는 것을 기억합니다 ... 당신은 아마도 루프에서 decode_input이라고 부릅니다. 사용자가 F9와 같은 것을 누르면 키보드 버퍼에 2 바이트가 발생하고 첫 번째 바이트는 0x0이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top