2

Rule_TnFortran 库 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);

匹配上面的界面。但大错特错!我有一个段错误。而且我已经测试过 double 是对应REAL(KIND=STND)STND模块的类型Precision_Model

现在谁能告诉我正确的签名是什么?我正在使用 GNU Fortran 和 C 编译器。

4

1 回答 1

1

请参阅GNU 文档。看起来您在 Fortran 和 C 之间以不同的顺序提供了参数。尝试将value最后放在 C 原型中。

另外,您在线上失踪bind(C)FUNCTION

于 2010-08-19T09:35:17.913 回答