我在fortran 77中有一个ema函数。我如何从C调用fortran函数。我知道在fortran 2003中有一个iso_c_bindings但我需要一些旧77标准的解决方案。
subroutine ema(inarray,leninarray,n,outarray,lenoutarray)
integer leninarray, lenoutarray, n, i
double precision inarray(leninarray), outarray(lenoutarray)
do 10 i = n+1, leninarray
outarray = inarray(i) * (1/n) + outarray(i-1) * (1-(1/n))
continue
end
感谢您的帮助 问候
答案 0 :(得分:3)
Fortran与C的调用约定几乎相同,但有以下不同之处:
E.g。如果你有一个强奸例程
subroutine ema(inarray,leninarray,n,outarray,lenoutarray)
变成
void ema(double*, int*, int*, double*, int*)
或
void ema_(double*, int*, int*, double*, int*)
取决于您的机器。在C ++中你想要
extern "C" void ema(double*, int*, int*, double*, int*)
或
extern "C" void ema_(double*, int*, int*, double*, int*)
当你将索引传递给例程时,不要忘记fortran数组从1开始。