Next: , Up: Types


2.3.1 Primitive Types

Libffi provides a number of built-in type descriptors that can be used to describe argument and return types:

ffi_type_void
The type void. This cannot be used for argument types, only for return values.
ffi_type_uint8
An unsigned, 8-bit integer type.
ffi_type_sint8
A signed, 8-bit integer type.
ffi_type_uint16
An unsigned, 16-bit integer type.
ffi_type_sint16
A signed, 16-bit integer type.
ffi_type_uint32
An unsigned, 32-bit integer type.
ffi_type_sint32
A signed, 32-bit integer type.
ffi_type_uint64
An unsigned, 64-bit integer type.
ffi_type_sint64
A signed, 64-bit integer type.
ffi_type_float
The C float type.
ffi_type_double
The C double type.
ffi_type_uchar
The C unsigned char type.
ffi_type_schar
The C signed char type. (Note that there is not an exact equivalent to the C char type in libffi; ordinarily you should either use ffi_type_schar or ffi_type_uchar depending on whether char is signed.)
ffi_type_ushort
The C unsigned short type.
ffi_type_sshort
The C short type.
ffi_type_uint
The C unsigned int type.
ffi_type_sint
The C int type.
ffi_type_ulong
The C unsigned long type.
ffi_type_slong
The C long type.
ffi_type_longdouble
On platforms that have a C long double type, this is defined. On other platforms, it is not.
ffi_type_pointer
A generic void * pointer. You should use this for all pointers, regardless of their real type.

Each of these is of type ffi_type, so you must take the address when passing to ffi_prep_cif.