【问题标题】:Switch Statement constant issueSwitch 语句常量问题
【发布时间】:2012-09-20 19:17:34
【问题描述】:
- (void)change:(int)a {
   int number = a;
   int max = 10;

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

       //.... more cases
   }
}

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

【问题讨论】:

  • 为什么要为此使用开关?如果有条件的会更适合这份工作
  • 您试图通过使用 switch 语句而不是 if 语句来完成什么?我不明白你的例子,我认为这是编造的。你能提供一个更现实的例子来说明你正在尝试做什么吗?

标签: objective-c c constants switch-statement


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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 语句生成的代码。

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      相关资源
      最近更新 更多