我有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在实时系统上执行。检查这些案例陈述的最快方法是什么(或有没有)?
您提供的代码不应该编译:(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();