2009-08-25 7 views
2

J'ai une fonction en C. Je veux appeler cette fonction de Fortran. Cette fonction contient 2 structures passées par pointeur. Comment est-ce que je fais ceci dans Fortran?Fortran structures et pointeurs

Ex:

struct a 
{ 
    int x; 
    float y; 
}; 

struct b 
{ 
    int p; 
    float q; 
}; 

En C:

fun(*a,*b); 

Comment appeler cela de Fortran? Ici a est la structure d'entrée et b est la structure de sortie. Je suis capable de remplir les structures dans Fortran mais ils sont incapables de conserver des données après leur passage.

Comment appeler fun(*a,*b) dans Fortran?

Répondre

0

La réponse dépend de la version de Fortran que vous avez. Dans GNU par exemple, vous pouvez utiliser la fonction C_LOC pour obtenir l'adresse.

1

Si vous utilisez une version récente de Fortran, il devrait y avoir un support pour les structures ou les enregistrements qui devraient vous permettre d'appeler le C directement. Si vous utilisez Fortran77 ou plus tôt, j'écrirais une méthode d'interface en C qui prendrait 4 arguments, 2 pour représenter le contenu de struct a et 2 pour représenter la structure b. La routine d'interface gérerait la population de la structure d'entrée et obtenir les résultats de la structure de sortie aux arguments. Je serais tenté de le faire même avec une version moderne de Fortran pour éviter les problèmes potentiels d'allocation de mémoire et de désallocation. Par exemple, si le Fortran est retourné mémoire allouée dans le C, il peut ne pas être possible pour le Fortran de le libérer.