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_ADDIを に初期化しdisDefaultます。どちらも定数式である必要があります --OR1K_IT_ADDIおそらく #define または enum タグです。

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すべてゼロに初期化され、その後に の 6 番目の要素が続き、struct fooの 4 番目の要素がa20 に初期化されます。

誰かが疑ったように、これは C++ ではサポートされていません。

于 2012-03-18T14:05:29.257 に答える