gpt4 book ai didi

c - Fortran 如何返回数组?

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:53 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com