方括号包围枚举是什么意思? [enum_value]

时间:2019-02-08 16:18:48

标签: c enums brackets

我目前正在把头放在 proper 状态机上,发现这篇文章似乎正是我一直在寻找的内容: https://aticleworld.com/state-machine-using-c/ 在理解基于表的状态机的表的过程中,我偶然发现了这段代码,我认为这部分代码很难阅读。

这是我所能做到的:

  • eSystemState是一个类型定义的枚举,指示当前状态。

  • eSystemEvent是一个类型定义的枚举,它指示当前事件。

  • pfEventHandler是返回eSystemState的类型定义的函数指针。

  • afEventHandler是一个类型定义的二维数组(受“ last_State”和“ last_Event”限制),其函数指针返回eSystemState。

接下来是每种事件类型的一些事件处理程序。 然后从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}, 
 };

3 个答案:

答案 0 :(得分:6)

此语法适用于指定的初始化程序。它允许您初始化数组的特定元素。

方括号中的值是要初始化的数组元素的索引。在这种情况下,它是一个枚举值,但它可以是任何整数。

答案 1 :(得分:1)

方括号标记数组下标。其中的enum标识符只是普通表达式,由enum值代替。

C允许您使用称为 designers 的显式下标初始化数组。例如,将A[1]初始化为4:

int A[3] = { [1] = 4 };

(其他元素默认为零。)

使用二维数组,语法会变得更加复杂:

int B[3][4] =
{
    [1] = { [3] = 7 }
};

这会将B[1][3]初始化为7。这就是您在所引用的代码中看到的语法。然后,它使用enum之类的Idle_State标识符代替上面显示的样本常量137

答案 2 :(得分:0)

我自己找到了它,它是一个“ 指定的初始值设定项”,它确实指定了应由所选值设置的元素。

它在C99中引入,它解释了为什么我不知道它的原因。其他元素初始化为0。

我将把问题留在这里,让其他可能对此感到疑惑的人。 How to initialize only few elements of an array with some values?

int a[10][10] = {
{},
{[5] = 8}
};

意味着在第二行中,元素5将被初始化为八个,其他元素将为零。