Question

I'm looking through the "Processor Modeling Guide" provided by a company named OVP (a product similar to qemu). In it, there's a little code snippet resembling the following:

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
};

I've never seen syntax like this before. irrelevant stuff about C++ removed

At the moment I don't have the ability to download/look at their stuff to look at how anything is defined, hence my question. If you recognize this syntax, can you weigh in?


edit

or1kDispatchTableC is a typedef for a pointer of type or1kDispatchTableCP, but I still don't have anything on what or1kDispatchTableCP is.

Was it helpful?

Solution

Well, assuming your first line is a typo, or or1kDispatchTableC is an array type, so that this is actually an array declaration, this looks like a C11 explicitly initialized array. The line

[OR1K_IT_ADDI] = disDefault,

initializes element OR1K_IT_ADDI to disDefault. Both of those need to be constant expressions -- OR1K_IT_ADDI is probably a #define or an enum tag.

I'm pretty sure that C++11 does NOT support this syntax, though some compilers (that also support C11) might support it as an extension.

From the names, I would guess that this is actually an array of function pointers.

OTHER TIPS

This is called designated initializers and is a C feature (supported since C99). It allows addressing array and structure/union elements directly, filling the gaps with default values.

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

Now this results in 5 elements of struct foo, all initialized to zero followed by a sixth element of struct foo with the 4th element of a initialized to 20.

Like someone else suspected, this is not supported by C++.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top