7.1.2 Типы производных и struct
Для совместимости типов производных с struct, необходимо использовать атрибут BIND(C) в объявлении типа. Например, следующее объявление типа
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
соответствует следующему объявлению struct в C
struct {
int i1, i2;
/* Note: "char" might be signed or unsigned. */
signed char i3;
double d1;
float _Complex c1;
char str[5];
} myType;
Типы производных с атрибутом привязки C не должны иметь атрибут sequence, параметров типа, атрибут extends, ни процедур, связанных с типом. Каждый компонент должен быть типа и вида, совместимых с интерфейсом, и не может иметь атрибутов pointer или allocatable. Имена компонентов не имеют значения для совместимости.
Поскольку прямых эквивалентов в Fortran нет, ни объединения, ни структуры с полями битовых данных или членами массива переменной длины не совместимы с интерфейсом.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gfortran/Derived-Types-and-struct.html