gcc では、次のように無名構造体を作成できます。
struct test2 {
struct {
int x;
int y;
};
int z;
};
しかし、匿名構造体の定義済みバージョンで同じことをしようとすると、失敗します。
struct test1 {
int x;
int y;
};
struct test2 {
struct test1;
int z;
};
これを行う理由は、C クラスの「メンバー関数」に対応する一連の関数ポインターを含む構造体を定義したいからです。構造体を匿名で含めないと、次のような厄介なことをしなければならなくなります。
object->API->function(object,...);
これは、私がする必要があるいくつかのことではうまくいきません(たとえば、「object.API」は「object」と一致しないため、オブジェクトの非表示をサポートする他の言語からの自動バインディングを行うことが困難または不可能になりますオブジェクト ポインタ)。
現時点では、関数をコピーして貼り付けるだけですが、これは面倒でエラーが発生しやすくなります。C プリプロセッサを使用することもできましたが、多数の関数プロトタイプを含むマクロを作成するのは見苦しく思えます。