Next: Interoperable Global Variables, Previous: Intrinsic Types, Up: Interoperability with C [Contents][Index]
7.1.2 Derived Types and struct
For compatibility of derived types with struct
, one needs to use
the BIND(C)
attribute in the type declaration. For instance, the
following type declaration
USE ISO_C_BINDING TYPE, BIND(C) :: myType INTEGER(C_INT) :: i1, i2 INTEGER(C_SIGNED_CHAR) :: i3 REAL(C_DOUBLE) :: d1 COMPLEX(C_FLOAT_COMPLEX) :: c1 CHARACTER(KIND=C_CHAR) :: str(5) END TYPE
matches the following struct
declaration in C
struct { int i1, i2; /* Note: "char" might be signed or unsigned. */ signed char i3; double d1; float _Complex c1; char str[5]; } myType;
Derived types with the C binding attribute shall not have the sequence
attribute, type parameters, the extends
attribute, nor type-bound
procedures. Every component must be of interoperable type and kind and may not
have the pointer
or allocatable
attribute. The names of the
components are irrelevant for interoperability.
As there exist no direct Fortran equivalents, neither unions nor structs with bit field or variable-length array members are interoperable.