我正在查看由名为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
是类型为or1kDispatchTableCP
的指针的typedef,但我仍然没有关于or1kDispatchTableCP
的内容。
答案 0 :(得分:5)
好吧,假设你的第一行是拼写错误,或or1kDispatchTableC
是一个数组类型,所以这实际上是一个数组声明,这看起来像一个C11显式初始化数组。这条线
[OR1K_IT_ADDI] = disDefault,
将元素OR1K_IT_ADDI
初始化为disDefault
。这两个都需要是常量表达式 - OR1K_IT_ADDI
可能是#define或枚举标记。
我非常确定C ++ 11不支持这种语法,但有些编译器(也支持C11)可能会支持它作为扩展。
从名称来看,我猜这实际上是一个函数指针数组。
答案 1 :(得分:2)
这称为指定的初始值设定项,是C功能(自C99起支持)。它允许直接寻址数组和结构/联合元素,用默认值填充空白。
struct foo { int a[10]; };
struct foo f[] = { [5].a[3] = 20 };
现在,这会产生5
struct foo
元素,所有元素都被初始化为零,然后是struct foo
的第六个元素,其中a
的第4个元素初始化为20。 / p>
与其他人怀疑,C ++不支持此功能。