IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Utiliser ISO_C_BINDING dans un prog FORTRAN


Sujet :

Fortran

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut Utiliser ISO_C_BINDING dans un prog FORTRAN
    Bonjour à tous,

    J'ai un prog fortran tout ce qu'il y a des plus classiques. Dans le but d'afficher l'adresse d'une variable (pour vérifier l'alignement correct d'un vecteur) je me suis interessé à "c_loc" et à "loc":

    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(iand(loc(bw(1)),3) /= 0)write(*,*) "bw not aligned"
    mon prog compile sans problème.

    Par contre si je tente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(iand(c_loc(bw(1)),3) /= 0)write(*,*) "bw not aligned"
    avec en haut;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    use, intrinsic :: ISO_C_binding
    mon programme ne compile plus et me sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    The data types of the argument(s) are invalid.   [IAND]
          IF(iand(c_loc(bw(1)),3) /= 0)write(*,*) "bw not aligned"
    --------------^
     
    This binary operation is invalid for this data type.   [IAND]
          IF(iand(c_loc(bw(1)),3) /= 0)write(*,*) "bw not aligned"
    ---------^
    bw est un tableau de REAL(8).
    Quelqu'un peut m'expliquer ce que le compilateur (ifort) n'aime pas ? et comment y remédier ?

    Merci d'avance!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,
    se peut-il que la fonction c_loc ne retourne pas un entier ?

    Pouvez-vous essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    write(*,*) kind(c_loc(bw(1)))
    write(*,*) c_loc(bw(1))

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut
    oula...je crois qu'il y a un pb

    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(*,*) kind(c_loc(bw(1)))
    me retourne:
    -100

    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(*,*) c_loc(bw(1))
    le programme ne compile pas avec l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    error #7300: This derived-type object in an input-output list cannot have private components.
            write(*,*) c_loc(bw(1))
    -------------------^
    avez vous une idée d'où celà peut venir ?

    Merci!

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser "loc" à la place de "c_loc" ? Cela éviterai des erreur de conversion de type entre C et Fortran.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Par défaut
    C'est ce que j'ai finalement fait...mais j'aimerai comprendre comment utiliser "c_loc".

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/06/2010, 10h10
  2. Comment utiliser le ping dans un prog
    Par debutant-1 dans le forum Linux
    Réponses: 2
    Dernier message: 23/06/2006, 10h09
  3. Réponses: 6
    Dernier message: 07/04/2006, 01h10
  4. Réponses: 9
    Dernier message: 06/04/2006, 18h40
  5. Utilisation d'un .h écrit en C dans un prog écrit en C++
    Par Sébastien THEVOT dans le forum C++
    Réponses: 8
    Dernier message: 26/10/2004, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo