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

Linux Discussion :

Imprimer le nom de fonction passée en paramètre


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Imprimer le nom de fonction passée en paramètre
    Bonsoir à tous

    Débutant en programmation système et 'C', j'ai un petit problème:

    comment faire pour récupérer/afficher le nom de fonction passée en paramètre.

    J'ai une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fonction1 ( void (*nom_fonction_2) (void) ){
     
    /* bla bla bla*/
    /* le code qui fait son travail*/
    }
    Maintenant je ne sais pas comment afficher sur l'écran via printf() ou un autre appel le nom de fonction 'nom_fonction_2'. Tous ce que j'ai essayé ne marche pas.

    Si qqn peut m'aider...svp
    En vous remerciant par avance ...

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Je ne connais pas la programmation système et ne sais donc pas si il est possible de le faire simplement. Cependant la façon la plus simple à mes yeux pour le réaliser serait de disposer de l'information directement depuis la fonction passée en paramètre.
    On pourrait par exemple avoir une fonction transmise du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void callback (char **name);
    name contiendrait alors le nom de la fonction en retour.

    Une autre manière pourrait être d'avoir un tableau qui contiendrait les pointeurs des différentes fonctions ainsi que leur nom respectif. Dans fonction1(); il ne te resterait plus qu'à trouver la correspondance du pointeur de la fonction transmise dans le tableau.

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Citation Envoyé par aral510 Voir le message
    comment faire pour récupérer/afficher le nom de fonction passée en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fonction1 ( void (*nom_fonction_2) (void) ){
     
    /* bla bla bla*/
    /* le code qui fait son travail*/
    }
    C'est une callback ? Comment est initialise le pointeur ? Est-ce que vous utilisez des libs dynamiques (appel a dlopen par exemple) ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Hello,

    Citation Envoyé par aral510 Voir le message
    comment faire pour récupérer/afficher le nom de fonction passée en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fonction1 ( void (*nom_fonction_2) (void) ){
     
    /* bla bla bla*/
    /* le code qui fait son travail*/
    }
    Maintenant je ne sais pas comment afficher sur l'écran via printf() ou un autre appel le nom de fonction 'nom_fonction_2'. Tous ce que j'ai essayé ne marche pas.
    Ce n'est pas possible en soi parce que tous les noms de symboles sont résolus à la compilation en leur adresse en mémoire et disparaissent complètement de l'exécutable s'ils ne sont pas nécessaires. Lorsque ta fonction sera appelé par le reste du programme, la seule chose que tu recevras en paramètre sera le point d'entrée en mémoire de la fonction concernée. Donc un pointeur.

    Toutefois, il faut signaler deux exceptions :

    • Le cas des bibliothèques dynamiques chargées à l'exécution avec dlopen() comme souligné par Gangsoleil ;
    • Le fait que si tu connais à l'avance les fonctions qui sont susceptibles de t'être transmises, alors tu peux dresser un tableau local dans ta routine qui contienne à la fois le pointeur vers ladite fonction et son nom en toutes lettres. Tu peux écrire une macro #define pour générer une expression qui spécifie les deux en même temps à partir d'un unique paramètre, mais cela t'oblige quand même à saisir la liste à l'avance. À l'exécution, tu parcours ton tableau pour voir si un pointeur égal à celui reçu s'y trouve.


    À noter enfin que si tu cherches à faire cela à des fins de déboguage, alors il vaut mieux directement apprendre à se servir du débogueur (gdb). Pour cela, compile ton programme avec l'option « -g » et exécute-le ensuite depuis gdb. Ton programme sera toujours compilé de la même façon mais l'exécutable sera accompagné d'une section supplémentaire contenant la table de tous les symboles.

    Ainsi, non seulement le compilateur sera à même de résoudre ces pointeurs en le nom de la fonction correspondante, mais également de t'afficher le code source au fur et à mesure de son exécution.

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Ce que je trouve bizarre, c'est que tu sois debutant et que tu cherches a jouer avec des pointeurs de fonctions, qui sont des concepts relativement complexes a apprehender...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Au lieu d'appeler ta fonction directement tu pourrais passer par un macro qui appellerait ta fonction (fonction1) en lui passant le nom de la fontion ("fonction2") et son adresse.

    Evidemment il faut que tu modifie fonction1 pour qu'elle prenne un nom de fonction et son adresse en argument.

Discussions similaires

  1. nom de fonction passée comme paramètre
    Par somnix dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2015, 22h19
  2. [PHPExcel] Load avec nom du fichier passé en paramètre
    Par al1_22 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/04/2013, 18h48
  3. Réponses: 2
    Dernier message: 27/01/2010, 17h01
  4. passage de paramètre à une fonction passée en paramètre
    Par bambou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/08/2007, 10h39
  5. Réponses: 8
    Dernier message: 29/08/2006, 18h36

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