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;
}
}
有什么线索吗?
解决方案
char 是 -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
,所以所有的case标签也都是。更改开关
以读取开关((unsigned int)ch)
将使其治愈。
看起来KEY_F(9)必须评估一个超出char范围的东西。
关于char的范围,其他人都说了什么。
我记得从我早期编写C ...你可能从循环中调用decode_input,对吗?如果用户按下F9之类的东西,你将在键盘缓冲区中得到两个字节 - 第一个字节将是0x0。
不隶属于 StackOverflow