Since C does not have built-in mechanisms for protecting the global name space,
generated bindings avoid name space collisions by using struct
and method names that incorporate all relevant naming information.
Without this approach, there would be
multiple structures or routines with the same name.
For a type Z in package X.Y, for example,
the name of the type that C clients use for an object reference is
X_Y_Z. The name is defined as follows in the X_Y_Z.h
header file
struct X_Y_Z__object; struct X_Y_Z__array; typedef struct X_Y_Z__object* X_Y_Z;
Method names, as discussed in Subsection 6.2.2, are built in a similar manner.