2

C の関数があります。この関数を Fortran から呼び出したいと考えています。この関数には、ポインターによって渡される 2 つの構造体が含まれています。Fortran でこれを行うにはどうすればよいですか?

元:

struct a
{
    int x;
    float y;
};

struct b
{
    int p;
    float q;
};

C:

fun(*a,*b);

これを Fortran から呼び出すにはどうすればよいですか? これaが入力構造で、bが出力構造です。Fortran で構造体を埋めることはできますが、通過後にデータを維持することができません。

fun(*a,*b)Fortranで呼び出すにはどうすればよいですか?

4

2 に答える 2

2

Fortran の最近のバージョンを使用している場合は、C を直接呼び出すことができる構造体またはレコードがサポートされているはずです。Fortran77 以前を使用している場合は、C でインターフェイス メソッドを記述します。このメソッドは、構造体 a の内容を表す 2 つと構造体 b を表す 2 つの 4 つの引数を取ります。インターフェイス ルーチンは、入力構造体の作成を処理し、出力構造体から引数への結果を取得します。メモリの割り当てと割り当て解除に関する潜在的な問題を回避するために、最新バージョンの Fortran でもこれを実行したくなるでしょう。たとえば、Fortran が C で割り当てられたメモリを返す場合、Fortran がメモリの割り当てを解除できない場合があります。

于 2009-08-26T13:45:37.210 に答える
0

答えは、使用している Fortran のバージョンによって異なります。たとえば、gnu では、C_LOC関数を使用してアドレスを取得できます。

于 2009-08-25T15:51:55.080 に答える