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

问题描述 投票:1回答:1

我有5个案例的switch case语句。这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;
  }

开关盒每10ms在实时系统上执行。检查这些案例陈述的最快方法是什么(或有没有)?

c switch-statement
1个回答
5
投票

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

编译器将优化更正的

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

具有非凡的熟练程度(可能有跳桌)。如果您有任何疑问,请检查生成的汇编代码。它可能比使用设置的函数指针数组更快,因此您可以编写SomeFunctions[Number]();

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

在你的情况下你可以写

default:
    CallSomeFunction();
© www.soinside.com 2019 - 2024. All rights reserved.