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 size
This must be manually set to the size of the complex type.
unsigned short alignment
This must be manually set to the alignment of the complex type.
unsigned short type
For a complex type, this must be set to FFI_TYPE_COMPLEX
.
ffi_type **elements
This 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.