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 :

test sur le nom d'une fonction


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Points : 84
    Points
    84
    Par défaut test sur le nom d'une fonction
    Bonjour,

    Comme le titre l'indique j'aimerais effectuer un test non pas sur une chaîne de caractères (strcmp), non pas sur des entiers (==) mais sur le nom d'une fonction. Je connais le type de la fonction (prédéfini t_fonction) mais son nom m'est transparent et est transmis en argument d'une autre fonction (c'est en réalité un pointeur de fonction). Voilà le résumé de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    typedef t_ptreeabs (*t_fonction)(int*);
    int f2(t_fonction farg){
        SI NOM DE farg=toto alors...
        SINON ...
        return tralala;
    }
    Sauriez-vous comment faire?

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    dans l'absolue, la seule chose que tu pourrais faire, ça serait de comparer ton pointeur de fonction avec les pointeurs des autres fonctions...

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    void a(void);
    void b(void);
     
    typedef void (*func)(void);
     
    void a_func(func F)
    {
        if(F == &a) printf("passage de a\n");
        else if(F == &b) printf("passage de b\n");
        else printf("fonction inconnue");
    }
     
    int main(int argc, char** argv)
    {
        func myPtr = &a;
        a_func(myPtr);
        return EXIT_SUCCESS;
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Points : 84
    Points
    84
    Par défaut
    je n'ai pas encore verifie mais l'idee me parait bonne. merci

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Le préprocesseur devrait pouvoir t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define S_(s) #s
    #define STR(s) S_(s)
     
    #define f2(farg) f2_ ((farg), STR(farg))
     
    int f2_(t_fonction farg, const char *fname);

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    ça va lui faire comparer le nom du pointeur, pas celui de la fonction là non ?

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Swoög
    ça va lui faire comparer le nom du pointeur, pas celui de la fonction là non ?
    Oui mais généralement ce sont les mêmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <stdio.h>
     
    #define S_(s) #s
    #define STR(s) S_(s)
     
    #define f2(farg) f2_ ((farg), STR(farg))
     
    typedef void (*func)(void);
     
    void a(void);
    int f2_(func farg, const char *fname);
     
    int main (void)
    {
    	f2 (a);
    	return 0;
    }
     
    int f2_(func farg, const char *fname)
    {
      printf ("Nom de la fonction : %s\n", fname);
      return 0;
    }
     
    void a(void)
    {
    }

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Points : 84
    Points
    84
    Par défaut
    ok merci à vous; la première solution fonctionne bien et je n'ai pas testé la seconde lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment envoyer le nom de l'objet sur lequel on est à une fonction ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/04/2009, 10h50
  2. test sur le nom d'une propriété
    Par Hefbee dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/11/2007, 08h46
  3. [Tableaux] Oubli du nom d'une fonction
    Par Ekimasu dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2006, 10h50
  4. [XSL] Test sur le nom d'une balise
    Par KibitO dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 18/12/2005, 13h44
  5. Réponses: 5
    Dernier message: 13/10/2005, 12h46

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