用于初始化数组/结构的不熟悉的语法,寻找解释

Bri*_*erg 1 c syntax c99 aggregate-initialization c11

我正在查看由名为OVP的公司(类似于qemu的产品)提供的"处理器建模指南".在其中,有一个类似于以下内容的小代码片段:

static or1kDispatchTableC dispatchTable = {
  // handle arithmetic instructions
  [OR1K_IT_ADDI] = disDefault,
  [OR1K_IT_ADDIC] = disDefault,
  [OR1K_IT_ANDI] = disDefault,
  [OR1K_IT_ORI] = disDefault,
  [OR1K_IT_XORI] = disDefault,
  [OR1K_IT_MULI] = disDefault
};
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这样的语法. 删除了关于C++的无关紧要的东西

目前我没有能力下载/查看他们的东西,看看有什么定义,因此我的问题.如果你认识到这种语法,你能说出来吗?


编辑

or1kDispatchTableC是类型指针的typedef or1kDispatchTableCP,但我仍然没有任何东西or1kDispatchTableCP.

Chr*_*odd 5

好吧,假设你的第一行是一个拼写错误,或者or1kDispatchTableC是一个数组类型,所以这实际上是一个数组声明,这看起来像一个C11显式初始化数组.这条线

[OR1K_IT_ADDI] = disDefault,
Run Code Online (Sandbox Code Playgroud)

将元素初始化OR1K_IT_ADDIdisDefault.这两者都需要是常量表达式 - OR1K_IT_ADDI可能是#define或枚举标记.

我很确定C++ 11不支持这种语法,尽管一些编译器(也支持C11)可能支持它作为扩展.

从名称来看,我猜这实际上是一个函数指针数组.