状态机实现c语言多级菜单,用C语言实现分层状态机

本文探讨了如何在C语言中实现一个分层状态机,用于多级菜单系统。作者遇到的问题在于如何有效地组织状态机,以处理不同类别的操作码。目前的实现方式是一个二维函数指针数组,但作者认为这在维护性方面存在问题。文章中提到了类的层级结构,以及不同类如何共享操作码,并表达了对避免使用switch case或大型常量数组以提高代码灵活性的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我对如何实现我的状态机感到有点困惑.

我已经知道它是分层的,因为一些州共享相同的行动.

我通过这些参数确定我需要做什么:

>类(值为:基数,派生,特定)

> OpCode

>参数1 – 可选

>参数2 – 可选

我的层次结构由Class决定,OpCode表示操作.

Derived可以使用Base的OpCodes和Specific可以使用Base和Derived的OpCodes.

天真的实现如下:

void (*const state_table [MAX_CLASSES][MAX_OPCODES]) (state *) {

{base_state1, base_state2, NULL, NULL},

{base_state1, base_state2, derived_state1, NULL},

{base_state1,base_state2, derived_state1, specific_state3},

};

void dispatch(state *s)

{

if (state_table[s->Class][s->OpCode] != NULL)

state_table[s->Class][s->OpCode](s);

}

这将变得难以维持.

还有另一种方法将状态映射到超类吗?

编辑:

进一步的计算让我觉得我可能会使用大部分(如果不是全部)操作码,但我不会使用所有可用的类.

另一个澄清:

某些OpCode可能通过多个派生类和基类共享.

例如࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值