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

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

       //.... more cases
   }
}

这只是我似乎无法解决的问题的一个小例子。我看过类似的帖子和答案通常包括通过#define 或枚举使用常量,但是当您有一个固定的常量但如果该值作为参数传递时,这些非常好,我该怎么做?如果有可能的话。任何意见,将不胜感激。

4

2 回答 2

3

简而言之,case语句只能对常量表达式进行操作,因此如果您需要更多动态条件,则必须使用if语句。

于 2012-09-20T19:19:11.703 回答
0

switch 语句用于根据常量表达式列表测试变量的值。带有各种 case 语句的 switch 与用于相同比较的一系列 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 回答