2

Rule_TnFortran ライブラリ CUBPACKのサブルーチンにはIntegrand、統合ベクトル関数を記述するパラメータが必要です。それは

INTERFACE 
   FUNCTION Integrand(NF,X) RESULT(Value)
      USE Precision_Model
      INTEGER,                       INTENT(IN)  :: NF
      REAL(KIND=STND), DIMENSION(:), INTENT(IN)  :: X
      REAL(KIND=STND), DIMENSION(NF)             :: Value
   END FUNCTION Integrand
END INTERFACE

Rule_TnC コードから呼び出したいので、上記のこのインターフェイスに正確に一致する C で関数型を定義する必要があります。したがって、Fortran 関数が配列を返す方法を理解しようとしました。最初は、次の C シグネチャを想定していました

void Integrand(double* value, const int* nf, const int* x);

上記のインターフェースに一致します。しかし、はるかに間違っています!セグメンテーション違反になりました。そして、 double が に対応する型であることを既にテストしておりREAL(KIND=STND)STNDはモジュールから出てきますPrecision_Model

正しい署名を教えてください。GNU Fortran および C コンパイラを使用しています。

4

1 に答える 1

1

GNU ドキュメントを参照してください。Fortran と C で引数の順序が異なっているようですvalue。C プロトタイプでは最後に配置してみてください。

また、あなたは行方不明bind(C)ですFUNCTION

于 2010-08-19T09:35:17.913 に答える