Есть ли типичный шаблон реализации конечного автомата?

Нам необходимо реализовать простую государственную машину в C . Стандартный оператор switch - лучший способ? У нас есть текущее состояние (состояние) и триггер перехода. switch(state) { case STATE_1: state = DoState1(transition); break; case STATE_2: state = DoState2(transition); break; } ......