libffi supports the complex types defined by the C99
standard (_Complex float, _Complex double and
_Complex long double with the built-in type descriptors
ffi_type_complex_float, ffi_type_complex_double and
ffi_type_complex_longdouble.
Custom complex types like _Complex int can also be used.
An ffi_type object has to be defined to describe the
complex type to libffi.
size_t sizeThis must be manually set to the size of the complex type.
unsigned short alignmentThis must be manually set to the alignment of the complex type.
unsigned short typeFor a complex type, this must be set to FFI_TYPE_COMPLEX.
ffi_type **elementsThis is a ‘NULL’-terminated array of pointers to
ffi_type objects. The first element is set to the
ffi_type of the complex’s base type. The second element
must be set to NULL.
The section Complex Type Example shows a way to determine
the size and alignment members in a platform
independent way.
For platforms that have no complex support in libffi yet,
the functions ffi_prep_cif and ffi_prep_args abort
the program if they encounter a complex type.