GCC警告“案例标签值超过类型的最大值”是什么意思?

时间:2009-06-18 05:46:39

标签: c gcc warnings switch-statement

我的代码如下所示:

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

任何线索?

5 个答案:

答案 0 :(得分:8)

char是-128到127之间的数字.KEY_F(9)可能是该范围之外的值。

使用:

  • unsigned char,或
  • int或
  • (char)KEY_F(9)

甚至更好,使用调试器并确定sizeof(KEY_F(9))以确保它是一个字节而不是短。

答案 1 :(得分:8)

好吧,KEY_F(9)将是273(参见curses.h),它超出了char(-128,127)的范围。

答案 2 :(得分:4)

在这种情况下,KEY_F(9)正在评估char范围之外的内容。 switch语句假设因为它的参数是char,所以所有案例标签也是如此。将switch更改为阅读switch((unsigned int)ch)可以解决问题。

答案 3 :(得分:0)

看起来KEY_F(9)必须评估一个超出char范围的东西。

答案 4 :(得分:0)

关于char的范围,其他人都说了什么。

我记得从我早期编写C ...你可能从循环中调用decode_input,对吗?如果用户按下F9之类的东西,你将在键盘缓冲区中得到两个字节 - 第一个字节将是0x0。