struct Foo { int a; }; struct Bar { struct Foo foo; int b; }; void f(Foo*); void g(Bar*); Bar *x; f(x); g(x); x->a + x->b;
If struct Bar has as its first member a struct Foo, then a struct Bar* can be implicitly converted to struct Foo*, either to pass to a function or to look up a data member.
This extension is intended to accomodate already-existing object-oriented C programs (especially libraries) without modification to their source code.
See also: the anonymous structure members extension.
Not implemented.