A structure is an aggregate object, which contains one or more sub-objects (members) which are potentially of different types. This code shows some examples of structure definitions and declarations:

// create named structure type 'struct s1'
struct s1 { 
   int x,y; 

// create two objects: 'a' is of type 'struct s1', 'b' is of type 'array[4] of struct s1'
struct s1 a, b[4];

// create objects 'c' and 'd'; both are of type 'array[3] of struct s1'
struct s1[3] c, d;

// create an anonymous structure type, and objects 'e' and 'f' of that type
struct { 
   bit4 a;
   var6 b;
   struct s2 {
      var32 x,y;
   } c[2]; 
} e, f;

// create named structure type 'struct s3', and objects 'g' and 'h' of that type
struct s3 { int x,y; } g;
struct s3 h;

Structures may be passed to, and returned from, functions. Structures which are assignment-compatible support a number of operations, including assignment and comparison.

Maia structures are essentially identical to C structures, except that they may not contain incomplete arrays, and C99 named member initialisation is not supported. The comparison operators are supported in Maia, but not in C.