GCC 경고의 의미는“케이스 레이블 값은 유형의 최대 값을 초과합니까?”의 의미는 무엇입니까?
-
06-07-2019 - |
문제
내 코드는 다음과 같습니다.
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이됩니다.
제휴하지 않습니다 StackOverflow