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

Ali*_*air 7 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

有线索吗?

raz*_*zed 8

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

使用:

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

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

  • 将KEY_F(9)转换为char可能会丢失信息,具体取决于该宏的实现.此外,char是有符号或无符号的,具体取决于平台默认值和编译器开关. (2认同)

小智 8

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

  • char的范围取决于char是有符号还是无符号.但是,如果curses.h是宏的源,那么它在范围之外. (2认同)