【发布时间】:2019-02-08 16:18:48
【问题描述】:
我目前正在研究正确状态机,我发现这篇文章似乎正是我一直在寻找的内容: https://aticleworld.com/state-machine-using-c/ 在理解基于表的状态机的表的过程中,我偶然发现了这段代码,我认为它很难阅读。
所以这是我能做到的:
eSystemState 是一个类型定义的枚举,指示当前状态。
eSystemEvent 是一个类型定义的枚举,表示当前事件。
pfEventHandler 是一个类型定义的函数指针,返回 eSystemState。
afEventHandler 是返回 eSystemState 的函数指针类型定义的二维数组(受“last_State”和“last_Event”限制)。
接下来是每种事件类型的一些事件处理程序。 然后是 main 的开始,一些初始化,然后就到了。
之前定义的 afEventHandler 类型被填充了内容,但是其中使用的操作对我来说是一个很大的谜。
我知道每个大括号都会填充一个新的“行”,但是枚举周围的方括号是什么意思,为什么显然可以为由此产生的任何内容赋值?
我知道枚举本质上是数字,我怀疑它(对我来说)是一种处理数组中特定元素的超级晦涩的方法。
我错了吗?
// Table to define valid states and event of finite state machine
static afEventHandler StateMachine = {
[Idle_State] ={[Card_Insert_Event]= InsertCardHandler },
[Card_Inserted_State] ={[Pin_Enter_Event] = EnterPinHandler },
[Pin_Eentered_State] ={[Option_Selection_Event] = OptionSelectionHandler},
[Option_Selected_State] ={[Amount_Enter_Event] = EnterAmountHandler},
[Amount_Entered_State] ={[Amount_Dispatch_Event] = AmountDispatchHandler},
};
【问题讨论】:
-
我的问题与“重复”之间的区别在于我不知道代码的作用,而思路正好相反。和我遇到同样情况的人肯定不会随便搜索“指定初始化器”。
-
因此,您的问题将继续存在并提供有用的搜索材料,而重复的链接将引导搜索者找到完整的答案。