Подпрограмма Rule_Tn
в библиотеке Fortran CUBPACK нуждается в параметре Integrand
, описывающем интегрированную векторную функцию.Это
INTERFACE
FUNCTION Integrand(NF,X) RESULT(Value)
USE Precision_Model
INTEGER, INTENT(IN) :: NF
REAL(KIND=STND), DIMENSION(:), INTENT(IN) :: X
REAL(KIND=STND), DIMENSION(NF) :: Value
END FUNCTION Integrand
END INTERFACE
Так как я хочу вызвать Rule_Tn
из кода C, мне нужно определить тип функции в C, точно соответствующий этому интерфейсу выше.Таким образом я попытался выяснить, как функция Fortran возвращает массивы.Сначала я предположил, что следующая сигнатура C
void Integrand(double* value, const int* nf, const int* x);
соответствует интерфейсу выше.Но далеко не так!Я получил Segfault.И я уже проверял, что double соответствует типу REAL(KIND=STND)
, STND
выходит из модуля Precision_Model
.
Теперь кто-нибудь может сказать мне, какая правильная подпись?Я использую компиляторы GNU Fortran и C.