1

我正在查看一家名为 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
};

我以前从未见过这样的语法。 删除了与 C++ 无关的内容

目前我没有能力下载/查看他们的东西来查看任何东西是如何定义的,因此我的问题。如果您认识这种语法,您可以权衡一下吗?


编辑

or1kDispatchTableC是 type 指针的 typedef or1kDispatchTableCP,但我仍然没有任何关于它的内容or1kDispatchTableCP

4

2 回答 2

5

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

[OR1K_IT_ADDI] = disDefault,

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

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

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

于 2012-03-15T23:29:59.573 回答
2

这称为指定初始化程序,是 C 功能(自 C99 起受支持)。它允许直接寻址数组和结构/联合元素,用默认值填补空白。

struct foo { int a[10]; };
struct foo f[] = { [5].a[3] = 20 };

现在这导致 , 的5元素struct foo全部初始化为零,然后是 的第六个元素,struct foo第四个元素a初始化为 20。

就像其他人怀疑的那样,C++ 不支持这一点。

于 2012-03-18T14:05:29.257 回答