代码之家  ›  专栏  ›  技术社区  ›  bastibe

对于switch语句,在本地块中定义变量是一个好主意吗?

  •  5
  • bastibe  · 技术社区  · 14 年前

    我有一个很长的开关情况说明。有些案子真的很短小。一些比较长,需要一些在其他地方从未使用过的变量,例如:

    switch (action) {
        case kSimpleAction:
            // Do something simple
            break;
        case kComplexAction: {
            int specialVariable = 5;
            // Do something complex with specialVariable
          } break;
    }
    

    另一种方法是在进入 switch 这样地:

    int specialVariable = 5;
    switch (action) {
        case kSimpleAction:
            // Do something simple
            break;
        case kComplexAction:
            // Do something complex with specialVariable
            break;
    }
    

    这可能会变得相当混乱,因为不清楚 case 变量属于,它使用一些不必要的内存。

    然而,我从未在其他地方见过这种用法。
    你认为在一个块中局部声明变量是一个好主意吗? 案例 ?

    6 回复  |  直到 9 年前
        1
  •  11
  •   Max    14 年前

    如果在switch块之后没有使用specialvariable,请在“case”块中声明它。

    一般来说,变量应该在它将要使用的尽可能小的范围内声明。

        2
  •  3
  •   Thomas Matthews    14 年前

    如果 switch 语句变得无法管理的巨大,您可能需要转换为函数指针表。通过将每种情况的代码放在不同的函数中,您不必担心变量声明和定义。

    另一个优点是 case 功能分离 翻译单位 . 这将通过只编译 案例 已经改变了。还可以通过隔离对其最小范围的更改来提高质量。

        3
  •  3
  •   Brian R. Bondy    14 年前

    是在所需的最窄范围内定义变量。

    因此,优选示例1。

        4
  •  2
  •   nategoose    14 年前

    我完全赞成

       case X:
       {
          type var;
          ...;
       }
       break; // I like to keep breaks outside of the blocks if I can
    

    如果其中的内容变得太复杂,并且开始妨碍您将整个开关/案例看作开关/案例的能力,那么请考虑将尽可能多的内容移到一个或两个由案例代码调用的内联函数中。这可以提高可读性,而不会在其中引发函数调用开销。

        5
  •  1
  •   bryanjonker    14 年前

    同意max——尽可能小的范围。这样,当下一个人需要更新它时,他/她就不必担心这个变量是否在switch语句的其他部分中使用。

        6
  •  1
  •   anon    14 年前

    我自己对于switch语句的规则是,每个case中最多只能有一个语句,不包括break。这意味着语句要么是初始化、赋值,要么是函数调用。把任何更复杂的代码放在一个案例中都是一个灾难——我“深情”地记得我所看到的(受petzold启发的)所有windows代码,它们在windows过程的同一个案例中处理消息参数。

    所以调用一个函数,把变量放进去!