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

时间:2019-03-05 09:46:16

标签: c switch-statement

我有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;
  }

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

1 个答案:

答案 0 :(得分:5)

您提供的代码不应编译:{{1​​}}在C语言中是(2 || 7 || 8 || 9 || 12 || 14 || 18 || 19 || 22 || 23 || 25),并且是重复的大小写标签。

编译器将优化更正的

1

熟练(可能带有 jump table )。如有疑问,请检查生成的汇编代码。它可能比使用设置的函数指针数组要快,因此您可以编写case 2: case 7: case 8: ... case 25: CallSomeFunction(); break;

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

尽管您可以写

SomeFunctions[Number]();