Switch Statement常量问题

时间:2012-09-20 19:17:35

标签: objective-c c constants switch-statement

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

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

       //.... more cases
   }
}

这只是我似乎无法解决的问题的一个小例子。我看过类似的帖子和答案通常包括通过#define或enum使用常量,但是如果你有一个固定的常量,但是如果值作为参数传递,我怎么能这样做呢?如果可能的话。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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语句生成的代码。