#include <stdio.h>
// 定义设备状态枚举
typedef enum {
INITIALIZE,
RUNNING,
PAUSED,
STOPPED
} State;
// 状态处理函数声明
void initializeState();
void runningState();
void pausedState();
void stoppedState();
// 函数指针类型定义
typedef void (*StateHandler)();
// 状态处理函数数组
StateHandler stateHandlers[] = {
initializeState,
runningState,
pausedState,
stoppedState
};
// 当前状态变量
State currentState = INITIALIZE;
// 状态转移函数
void transitionToState(State newState) {
currentState = newState;
stateHandlers[currentState]();
}
// 各个状态的处理函数实现
void initializeState() {
printf("进入初始化状态\n");
}
void runningState() {
printf("进入运行状态\n");
}
void pausedState() {
printf("进入暂停状态\n");
}
void stoppedState() {
printf("进入停止状态\n");
}
int main() {
transitionToState(RUNNING);
transitionToState(PAUSED);
transitionToState(STOPPED);
transitionToState(INITIALIZE);
return 0;
}
状态机通过函数指针实现状态转移的解释
- 定义状态枚举:通过
typedef enum
定义了设备可能的状态,如INITIALIZE
、RUNNING
、PAUSED
和STOPPED
。
- 定义函数指针类型:使用
typedef
定义了一个函数指针类型StateHandler
,它指向无参数无返回值的函数。
- 状态处理函数数组:创建了一个
stateHandlers
数组,数组中的每个元素都是一个函数指针,分别指向各个状态对应的处理函数。
- 状态转移函数:
transitionToState
函数接受一个新的状态作为参数,将当前状态更新为新状态,并通过函数指针调用对应的状态处理函数。例如,当newState
为RUNNING
时,currentState
被设置为RUNNING
,然后调用stateHandlers[RUNNING]
,即runningState
函数。
- 状态处理函数实现:每个状态处理函数,如
initializeState
、runningState
等,实现了该状态下设备的具体行为。在这个示例中,仅仅是打印进入相应状态的信息。
- 主函数测试:在
main
函数中,通过调用transitionToState
函数来模拟状态的转移,展示状态机的工作过程。