有限状态机(FSM)是设计和实现事件驱动程序内复杂行为组织原则的有力工具。
设计思路:
(1)用函数指针表示状态;
(2)函数指针函数接收事件(EVENT),根据(EVENT)决定下个状态;
(3)函数指针函数返回下个状态的函数指针。
利用强制类型转换,实现函数指针函数的原型。
#include <stdio.h>
typedef void (*state_ret)(int event);
typedef state_ret (*state)(int event);
// 申明状态函数
state_ret STATE1(int event);
state_ret STATE2(int event);
state_ret STATE3(int event);
// 事件列表
enum EVENT_NUM {
EVENT1,
EVENT2,
EVENT3,
EVENT4,
};
int main(void) {
int i;
int event;
state curState = STATE1;
for (i = 0; i < 5; i++) {
switch(i % 5) {
case 0: event = EVENT1; break;
case 1: event = EVENT2; break;
case 2: event = EVENT3; break;
case 3: event = EVENT4; break;
case 4: event = EVENT2; break;
default: break;
}
// 运行当前状态函数,返回下一状态函数指针
curStat