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)はおそらくその範囲外の値です。
使用:
- unsigned char、または
- int、または
- (char)KEY_F(9)
さらに良いのは、デバッガを使用してsizeof(KEY_F(9))を決定し、それがバイトではなくショートであることを確認することです。
他のヒント
まあ、KEY_F(9)は273(curses.hを参照)になり、charの範囲(-128,127)を超えます。
この場合、 KEY_F(9)
は char
の範囲外に評価されます。 switch
ステートメントは、引数が char
であるため、すべてのケースラベルも同じであると想定しています。 switch((unsigned int)ch)
を読み取るように switch
を変更すると、それが修正されます。
KEY_F(9)はcharの範囲外にあるものに評価する必要があるようです。
charの範囲に関して他の誰もが言ったこと。
Cを書いた初期の頃からこれを覚えています...おそらくループからdecode_inputを呼び出しているのでしょうか?ユーザーがF9などを押すと、キーボードバッファーに2バイトが追加されます。最初のバイトは0x0になります。
所属していません StackOverflow