c语言switch用法状态机,「编程之美」用C语言实现状态机(超实用)

本文介绍了如何使用C语言结构体和枚举来实现一个通用的有限状态机(FSM),避免了大量if/else或switch/case的冗长代码。通过定义状态、事件和动作,实现了状态的平滑转换,并提供了查找和执行相应动作的函数。这种方法有利于代码的可读性和维护性,尤其适用于处理复杂状态和事件交互的情况。
摘要由CSDN通过智能技术生成

关于状态机,基础的知识点可以自行理解,讲解的很多,这里主要是想写一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。传统的实现方案if...else : 搞一大堆if else, 一个函数写很长很长......

swich...case : 也搞一大堆一个函数写很长很长......

先来看看最近做的一个项目,无线通信协议实现的状态机是什么样子的:

192367275_1_20200606093022490

有三种类型的事件:上层下达的命令事件;下层到达的标志和数据传输事件;超时定时器超时事件。有10种状态,关联性很大,复杂了吧,这要是各种if/else的要写到什么时候呢。

偷偷放一张讨论的图,乱七八糟形容很恰当。

192367275_2_20200606093022552

在事件中判断状态,在状态中判断事件,横竖两种写法的代码都比较冗长,看起来呢也不大好,一旦增减,就又要动脑子重新梳理一遍,很累的。

怎么去写呢?其状态机原理:在根据当前状态(cur_state) 下,发生事件(event)后,转移

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值