La sous-routine Rule_Tn
de la bibliothèque Fortran CUBPACK nécessite un paramètre Integrand
décrivant la fonction vectorielle intégrée. Il est unComment Fortran retourne-t-il les baies?
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
Depuis que je veux appeler Rule_Tn
à partir du code C je dois définir un type de fonction en C correspondant exactement à cette interface ci-dessus. J'ai donc essayé de comprendre comment une fonction Fortran retourne des tableaux. Au début, j'ai supposé la signature C suivante
void Integrand(double* value, const int* nf, const int* x);
correspond à l'interface ci-dessus. Mais loin faux! J'ai une erreur de segmentation. Et j'ai déjà testé que le double est le type correspondant à REAL(KIND=STND)
, le STND
sort du module Precision_Model
.
Maintenant, quelqu'un peut-il me dire quelle est la bonne signature? J'utilise les compilateurs GNU Fortran et C.
Ce n'est pas le point, la valeur de 'STND' est définie dans le module' Precision_Model' et j'ai déjà testé que 'REAL (KIND = STND)' correspond à 'double'. La question est: Quelle est la signature C correspondante à cette interface? – phlipsy
@phlipsy: vous voudrez peut-être changer le libellé "fourni", alors. Mise à jour de la réponse – Potatoswatter
Ok, j'ai reformulé cette partie de ma question. – phlipsy