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

C Discussion :

appel de fonction


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut appel de fonction
    Bonjour,
    Comment fait-on pour appeler explicitement une fonction qui appartient à un module ?
    Par exemple je veux écrire une nouvelle fonction sinus :
    float val = sin(float x);
    Et je voudrais comparer le résultat à celui que donne le module math.h ; comment appeler la fonction sin de math.h ?

    En java ça donnerait quelque chose comme :
    valeur = math.sin(x);

    Merci pour votre réponse.

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    bonjour da4di

    C'est pas possible en C.

    En fait en C, tu ne peux pas avoir deux fonctions de portée globale (visible par tous les autres fichiers C) qui portent le même nom. Si tu le fait, le linkeur te donnera un message d'erreur et s'arrêtera.

    Par contre en interne d'un module , c'est possible. Il suffit d'ajouter le mot clef static devient ta fonction pourquoi qu'elle soit locale à ton fichier C. Tu pourras donc avoir autant de fonctions que de fichiers portant le même nom. je te déconseille fortement de la faire, car ton code devient rapidement illisible.

    Pour faire ton test, donc il te faut deux fichiers C,

    Fichier 2: Celui qui contient ta fonction sin de la librairie mathématique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <math.h>
     
    callMathLlibSin(...) 
    {
        return sin(...);   // Appel du sin de math.h
    }

    Fichier 1: Celui qui contient ta fonction sin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static float sin(float x) {   // Mon sinus a moi
       ....
    }
     
    int main(void) {
      sin(....)
      callMathLlibSin(...)
    }

    Je n'ai pas testée cette solution, j'espère donc ne pas avoir dit de sottises plus grosses que moi
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Il n'y a pas vraiment de système de modules en C. Tu peux procéder par fichier comme inqisué précédemment, mais dans ton cas il serait plus judicieux de nommer ta fonction avec un nom du genre my_sinus et de faire appel à my_sinus quand tu veux utiliser ton propre code, ou de faire appel à sin si tu veux utiliser celle de la lib math.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 444
    Par défaut
    Même si tout ceci est vrai, si tu veux vraiment comparer explicitement deux fonctions identiques mais provenant de deux bibliothèques différentes, tu peux toujours les charger toi-même à l'exécution, avec dlopen().

    Tu obtiendras alors un pointeur par fonction, que tu pourras stocker où bon te semble, et tu pourras parvenir à tes fins.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    Merci pour vos réponses.

    En fait, je cherche à accélérer mes calculs en utilisant la bibliothèque SSE2.
    SSE2 possède des fonctions qui portent exactement le même nom que celles de la bibliothèque mathématique (sin, cos, fabs, etc.)
    Je fais donc 2 include :
    #include <math.h>
    #include <emmintrin.h>
    et avec une variable de précompilation je choisis ou pas SSE2.
    Les premiers essais sont assez concluants (gain de temps de 50%)

    Mais comment est-ce que je peux choisir avec certitude la fonction de l'une ou l'autre des 2 bibliothèques ?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Les fonctions sin(), cos() et autres de ta librairie SSE2, c'est dans une DLL ou alors dans une librairie linkée statiquement avec ton binaire ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Par défaut
    Il n'y a pas de dll.
    l'option g++ -msse2 appelle des fonctions câblées du microprocesseur.

Discussions similaires

  1. Appeler une fonction avec "action" ds un
    Par drinkmilk dans le forum ASP
    Réponses: 4
    Dernier message: 20/04/2004, 14h54
  2. Réponses: 4
    Dernier message: 19/04/2004, 13h41
  3. [JSP] Appeler une fonction
    Par Patrick95 dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 23/12/2003, 13h44
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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