Jak se Fortran vrátit pole?

hlasů
2

Podprogram Rule_Tnv Fortran knihovně CUBPACK potřebuje parametr Integrandpopisující integrovanou vektorovou funkci. To je

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

Vzhledem k tomu, chci volat Rule_Tnz kódu C Musím definovat typ funkce v C přesně odpovídající tomuto rozhraní výše. Tak jsem se snažil přijít na to, jak Fortran funkce vrací pole. Zpočátku jsem měl následující podpis C

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

odpovídá na rozhraní výše. Ale daleko od pravdy! Mám segfault. A už jsem testoval, že dvojí je odpovídající typ, který REAL(KIND=STND)se STNDvychází z modulu Precision_Model.

Nyní může mi někdo říct, co je správné podpis? Já jsem za použití GNU Fortran a C kompilátory.

Položena 19/08/2010 v 10:26
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Viz GNU dokumenty . Vypadá to, že za předpokladu, že argumenty v jiném pořadí mezi Fortran a C. pokuste valueposlední prototyp C.

Také vám chybí bind(C)na FUNCTIONřádku.

Odpovězeno 19/08/2010 v 10:35
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more