私は C++ と Fortran コードの両方を扱っています。C++ コードは、Fortran サブルーチンを呼び出す必要があります。Fortran サブルーチンの 1 つのパラメーターが Fortran 型complex
です。
C++ コードは 1 つのファイルにあり、Fortran コード サブルーチンは別のファイルにあります。私は64 ビットシステムgcc
で andを使用しています。gfortran
GNU/Linux
以下は、Fortran サブルーチン宣言 (およびいくつかの追加行) を示すスニペットです。
SUBROUTINE minp (AMP,L,L2,FMINP,PHI)
REAL*4 AMP( L ),FMINP( L )
COMPLEX PHI( L )
C++ ファイルでは、Fortran コードに渡される引数は、値ではなく参照によって渡す必要があることを理解しています。extern
Fortran サブルーチンは、キーワードを使用して C++ コード (ソース コード ファイルの先頭) で関数として宣言されます。
extern "C"
{
minp_ (float *amp, int &L, int &L2, float *fminp, complex *phi);
}
ただし、関数の最後のパラメーターは複雑な C 配列です。どうすれば次のことが可能になるでしょうか:
phi
引数として渡される C/C++ の複雑な配列にメモリを割り当てますか?- Fortran コードでメモリを使用できるように、配列を引数として Fortran サブルーチンに渡しますか?