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

用条件检查长case语句的更快方法

  •  0
  • JohnDoe  · 技术社区  · 6 年前

    我有5个病例的交换病例陈述。 这5个案例中有一个看起来像:

    switch (Number)
       {
       case 1:
          CallSomeFunction1();
          break;
       case 3:
          CallSomeFunction3();
          break;
       case 4:
          CallSomeFunction4();
          break;
       case (2 || 7 || 8 || 9 || 12 || 14 || 18 || 19 || 22 || 23 || 25):
          CallSomeFunction();
          break;
       case 6:
          CallSomeFunction6();
          break;
      }
    

    开关箱每10毫秒在实时系统上执行一次。 有什么(或有什么)最快的方法来核对那些案例陈述?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Bathsheba    6 年前

    您提供的代码不应编译: (2 || 7 || 8 || 9 || 12 || 14 || 18 || 19 || 22 || 23 || 25) 1 在C语言中,这是一个重复的案例标签。

    编译器将优化

    case 2: case 7: case 8: ... case 25:
        CallSomeFunction();
        break;
    

    非常熟练(可能是 跳转表 )如果有任何疑问,请检查生成的程序集代码。它可能比使用函数指针数组更快,这样您就可以编写 SomeFunctions[Number](); .

    这两种方法中的任何一种都可能比编写将2、7、8、…、25转换为常量表达式的函数快。

    在你的情况下,尽管你可以写

    default:
        CallSomeFunction();