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

Joh*_*Doe 1 c switch-statement

我有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;
  }
Run Code Online (Sandbox Code Playgroud)

切换情况每10毫秒在实时系统上执行一次。将有哪些(或没有任何一种)最快的方式来对照这些案例陈述?

Bat*_*eba 5

你目前不应该编译代码:(2 || 7 || 8 || 9 || 12 || 14 || 18 || 19 || 22 || 23 || 25)1在C,这就是重复的情况下标签。

编译器将优化更正

case 2: case 7: case 8: ... case 25:
    CallSomeFunction();
    break;
Run Code Online (Sandbox Code Playgroud)

具有出色的熟练度(可能带有跳转表)。如有疑问,请检查生成的汇编代码。它可能比使用设置的函数指针数组要快,以便可以编写SomeFunctions[Number]();

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

就您而言,尽管您可以写

default:
    CallSomeFunction();
Run Code Online (Sandbox Code Playgroud)