Fortran 库 CUBPACK 中的子例程 Rule_Tn
需要一个参数 Integrand
来描述积分 vector 函数。这是一个
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
因为我想从 C 代码调用 Rule_Tn
,所以我需要在 C 中定义一个与上面这个接口(interface)完全匹配的函数类型。因此,我试图弄清楚 Fortran 函数如何返回数组。一开始我以为是下面的 C 签名
void Integrand(double* value, const int* nf, const int* x);
与上面的界面匹配。但大错特错!我遇到了段错误。我已经测试过 double 是 REAL(KIND=STND)
的对应类型,STND
来自模块 Precision_Model
。
现在谁能告诉我什么是正确的签名?我正在使用 GNU Fortran 和 C 编译器。
最佳答案
参见 GNU docs .看起来您在 Fortran 和 C 之间以不同的顺序提供了参数。尝试将 value
放在 C 原型(prototype)的最后。
此外,您在 FUNCTION
行中缺少 bind(C)
。
关于c - Fortran 如何返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3520376/