次のように2つの構造体タイプがあるとしましょう。
struct A {
int a;
}
struct B {
int b;
int c;
}
指定された初期化子を使用して、AとBの両方のインスタンスを含むように柔軟な長さの配列を初期化することは可能でしょうか。
<sometype> my_array[] = {
((struct A){ .a = 10, }),
((struct B){ .b = 1, .c = 5, }),
};
また、配列内の要素のタイプを知る必要があるため、構造体の前にcharを配置する方法も便利です。:)
これはひどく壊れているように見えますが、バイトコードのようなデータ構造を一緒にパックしようとしています。これは、それらを定義するためのエレガントな方法のように見えます(少なくともいくつかのマクロの助けを借りて)。
編集:いくつかのポイントを明確にするために:
- 動的割り当てはオプションではありません
- ユニオンでもありません-要素がそのタイプに必要なスペースを正確に占めるようにしたい
- http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.htmlによると、質問の「可変長配列」は誤解を招く可能性があります。正確な単位は「柔軟な長さ配列」です。サンプルコードは、理想的にはどのように表示したいかです。
したがって、基本的に私が望んでいるのは、バイナリの.dataセグメントに割り当てられているメモリ領域に、任意の構造化データをパックできるようにすることです。構造体からのデータをパックするためだけに、要素にランダムアクセスする必要はありません。私の例で柔軟な長さの配列を使用するのは、この構造体が私が達成したいものに最も近いように見えるためです。しかし、宣言はその仕事をする他のものである可能性があります(アセンブラーを除いて、私はCの移植性を保持する必要があります)。