Extension: Anonymous Structure Members

Example

struct Lock {
  int val;
};
void lock(Lock*);
void unlock(Lock*);

struct Object {
  Lock;
  int data;
};

Object *o;

lock(o);
o->data;
o->val;
unlock(o);
/* same as: unlock(&o->Lock); */

Syntax & Semantics

Structure elements of structure type can be declared anonymously. All the elements in the anonymous structure are available in its containing structure. The containing structure can be passed to a function expecting a pointer to the anonymous structure.

The anonymous element can be named by its type, as in o->Lock in the example.

Anonymous elements need not be the first element in a structure. In this case, the compiler must translate the pointer appropriately when converting it to be passed to a function.

Inspired by similar support in the Plan 9 C Compiler.

Implementation

Not implemented.