我正在使用 C++ 和 Fortran 代码。C++ 代码需要调用 Fortran 子例程。Fortran 子例程的一个参数具有 Fortran 类型complex
。
C++ 代码在一个文件中,而 Fortran 代码子例程在另一个文件中。我正在使用64 位gcc
系统。gfortran
GNU/Linux
这是一个显示 Fortran 子例程声明的片段(以及一些附加行):
SUBROUTINE minp (AMP,L,L2,FMINP,PHI)
REAL*4 AMP( L ),FMINP( L )
COMPLEX PHI( L )
在 C++ 文件中,我知道传递给 Fortran 代码的参数需要通过引用传递,而不是通过值传递。Fortran 子例程在 C++ 代码(在源代码文件的顶部)中使用extern
关键字声明为函数。
extern "C"
{
minp_ (float *amp, int &L, int &L2, float *fminp, complex *phi);
}
但是,函数的最后一个参数是一个复杂的 C 数组。怎么可能:
- 为 C/C++ 中的复杂数组分配内存以作为
phi
参数传递? - 将数组作为参数传递给 Fortran 子例程,以便 Fortran 代码可以使用内存?