1. ホーム
  2. c

[解決済み】 switch case: error: case label does not reduce to an integer constant

2022-01-29 17:45:37

質問

int value;

const int signalmin = some_function();

switch(value)
{
   case signalmin:
   break;
}

some_functionの値を読み込んで、そのint値を使ってswitch case onをするのです。C99コンパイラは返してくる。

error: case label does not reduce to an integer constant

しかし、私は #define なぜなら、スイッチが実行される前に int 値が読み込まれるからです。

どのように解決するのですか?

switch ラベルは定数式でなければならず、コンパイル時に評価されなければなりません。実行時の値で分岐させたい場合は if .

A const -修飾された変数は 定数式 それは単に、変更することが許されない値です。

整数の定数式の形式は、6.6 (6) [C99およびC2011規格のn1570ドラフト]に詳述されています。

6 An 整数定数式 は整数型であり、オペランドのみを持つものとする。 は、整数定数、列挙定数、文字定数である。 sizeof 結果が整数定数である式。 _Alignof 式、および浮動小数点 定数は、キャストの直接のオペランドとなります。整数定数におけるキャスト演算子 の一部を除いて、算術型を整数型に変換するだけである。 オペランドを sizeof または _Alignof 演算子を使用します。

のみという制約があります。 sizeof 結果が整数定数になる式は sizeof オペランドが可変長配列である式。