用C语言创建一个状态机类
时间: 2024-04-30 18:17:33 浏览: 110
C语言实现的状态机
5星 · 资源好评率100%
在C语言中创建一个状态机类可以使用结构体来实现。以下是一个简单的状态机类的示例:
```c
// 定义状态机的状态
enum { STATE_1, STATE_2, STATE_3 };
// 定义状态机的事件
enum { EVENT_1, EVENT_2, EVENT_3 };
// 定义状态机的转移表
int state_table[3][3] = {
{ STATE_2, STATE_3, STATE_1 },
{ STATE_3, STATE_1, STATE_2 },
{ STATE_1, STATE_2, STATE_3 }
};
// 定义状态机类
typedef struct {
int state; // 当前状态
} StateMachine;
// 初始化状态机
void init_state_machine(StateMachine *sm) {
sm->state = STATE_1; // 初始状态为STATE_1
}
// 处理事件并转移状态
void handle_event(StateMachine *sm, int event) {
sm->state = state_table[sm->state][event];
}
```
使用示例:
```c
int main() {
StateMachine sm;
init_state_machine(&sm);
handle_event(&sm, EVENT_1);
handle_event(&sm, EVENT_2);
handle_event(&sm, EVENT_3);
handle_event(&sm, EVENT_1);
printf("Current state: %d\n", sm.state); // 输出当前状态
return 0;
}
```
这个示例演示了一个简单的状态机,有三个状态和三个事件,通过状态转移表实现状态之间的转移。在主函数中,通过处理事件,状态机会从初始状态STATE_1 转移到其他状态。最终输出当前状态。
阅读全文