Оптимизирующие компиляторы (включая GCC) скомпилируют оператор switch в таблицу переходов (делая оператор switch точно так же быстро, как то, что вы пытаетесь построить), ЕСЛИ выполняются следующие условия:
Ваши случаи переключения (номера состояний) начинаются с нуля.
Ваши случаи переключения строго увеличиваются.
Вы не пропускаете целые числа в своих случаях переключения.
Есть достаточно случаев, когда таблица переходов на самом деле быстрее (пара десятков сравнений и переходов в методе проверки каждого случая при работе с операторами switch на самом деле быстрее, чем таблица переходов.)
Это дает вам преимущество, заключающееся в том, что вы можете писать свой код в стандарте C вместо того, чтобы полагаться на расширение компилятора. Это будет работать так же быстро в GCC. Он также будет работать так же быстро в большинстве оптимизирующих компиляторов (я знаю, что это делает компилятор Intel; не уверен насчет вещей Microsoft). И это будет работать, хотя и медленнее, на любом компиляторе.