2009-08-25 36 views
2

私はC言語で関数を持っていますが、この関数をFortranから呼びたいと思います。この関数は、ポインタによって渡される2つの構造体を含みます。 Fortranでこれをどうやって行うのですか?Fortranの構造体とポインタ

例:Cで

struct a 
{ 
    int x; 
    float y; 
}; 

struct b 
{ 
    int p; 
    float q; 
}; 

:私は、Fortranからこれを呼び出すにはどうすればよい

fun(*a,*b); 

?ここでaは入力構造体、bは出力構造体です。私はFortranの構造体を埋めることができますが、渡した後はデータを保持することができません。

fun(*a,*b)をFortranでどのように呼び出すことができますか?

答えて

0

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

1

最近のバージョンのFortranを使用している場合は、Cを直接呼び出すことができる構造またはレコードがサポートされている必要があります。 Fortran77以前を使用している場合は、4つの引数を取るCのインタフェースメソッドを記述します.2つはstruct aの内容を表し、2はstruct bを表します。インタフェースルーチンは、入力構造体の母集団を処理し、出力構造体の結果を引数に渡します。 メモリ割り当てと割り当て解除の潜在的な問題を避けるために、現代版のFortranでもこれを行うように誘惑されます。たとえば、Cで割り当てられたメモリがFortranに返された場合、Fortranが割り当てを解除することはできません。

関連する問題