0
- (void)change:(int)a {
   int number = a;
   int max = 10;

   switch(max) {
     case number:
       //Do something
       break;

       //.... more cases
   }
}

これは、私が解決できないと思われる問題のほんの一例です。私は同様の投稿を見てきましたが、回答には通常、#defineまたはenumを介した定数の使用が含まれますが、固定された定数がある場合はこれらは素晴らしいですが、値がパラメーターとして渡される場合、これをどのように行うことができますか?可能であれば。何かアドバイスをいただければ幸いです。

4

2 に答える 2

3

一言で言えば、caseステートメントは定数式でのみ動作できるため、より動的な条件が必要な場合は、ifステートメントを使用する必要があります。

于 2012-09-20T19:19:11.703 に答える
0

switchステートメントは、定数式のリストに対して変数の値をテストするために使用されます。さまざまなcaseステートメントを含むスイッチと同じ比較のための一連のif/elseifステートメントの違いは、論理的な違いというよりも構文上の違いです。

ただし、if / elseifステートメントは定数式を必要としないため、より柔軟性があり、if/elseifでもより複雑な論理式を使用できます。

例えば:

switch (iValue) {
    case 1:
        break;
    case 4:
        break;
    default:
        break;
}

この一連のif/elseifステートメントと同じ意味があります。

if (iValue == 1) {
} else if (iValue == 4) {
} else {
}

ほとんどの場合、コンパイラは、switchステートメントのコードを生成するときに、一連のif/elseifコードを生成します。したがって、if / elseifステートメントシリーズ用にコンパイラーによって生成される実際のコードは、switchステートメント用に生成されるコードに似ています。

于 2012-09-20T19:56:12.393 に答える