Альтернативный подход - это двумерный массив, который описывает для каждой комбинации состояния / события действия, которые необходимо выполнить, и следующее состояние, в которое нужно перейти. Это может быть сложнее в управлении, когда вам нужно перейти в разные состояния в зависимости от «обстоятельств», но это может быть сделано для правильной работы. У вас есть функция распознавания событий, которая возвращает следующее событие; у вас есть таблица, в которой каждая запись в таблице идентифицирует функцию, вызываемую при получении события, и следующее состояние, в которое нужно перейти - если только вызываемая функция не переопределяет это состояние.
На самом деле генерация такого кода более скудна - это зависит от того, как FSM описан в первую очередь. Обнаружение дублирующих действий часто важно. Часто вы можете положиться на методы «разреженной матрицы», которые не записывают обработку ошибок явно: если запись логически существует в разреженной матрице, вы воздействуете на эту информацию о событии / состоянии, но если запись не существует, вы возвращаетесь к соответствующей код сообщения об ошибках и повторной синхронизации.
2D-массив указателей на структуры может быть передан в общую функцию FSM; того факта, что вы пишете тройной указатель, достаточно, чтобы вы осторожно относились к тому, что происходит. (Я написал один из них в марте 1986 года - у меня больше нет источника для этого на диске, хотя у меня все еще есть распечатка документа, в котором он описан.)