c - Fortran 如何返回数组?

标签 c interop fortran gnu fortran90

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/

相关文章:

c - Windows 创建窗口 API

c - 为什么涉及变量的操作在C中不会溢出

c - 递归搜索二叉树中的元素时出现问题

c++ - 有什么理由反对在 QueryInterface() 实现中直接调用 AddRef() 吗?

c# - 图片插入word文档后如何改变图片大小

c - SSE:有条件地替换像素

.net - 当我的 .net 程序集不再位于同一位置时,如何取消注册?

fortran - Fortran 中的 toString

python - 如何访问用 Python 编写的 FORTRAN 函数?

string - Fortran 中的可变长度字符串