Код, который вы предоставляете, не должен компилироваться: (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();