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 :

Cette instruction est du chinois !


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 33
    Par défaut Cette instruction est du chinois !
    Salut à tous,
    Je ne suis pas un crac de c++ mais je m y connais un peu, ma question est peu être simple pour certain, mais surement pas évidente pour bcp:
    j'ai rencontré ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (*SETCALLBACK)(const char * , void (*)(char *));
    et franchement je vois pas vraiment qu est ce que ça veut dire ??? déjà le (*SETCALLBACK) et puis surtout ce void (*)(char *)
    Est ce que vous pouvez m'eclairez sur ce que veux dire cette instruction ou sinon me guider vers un tuto qui parle de ça parce je n'ai rien trouvé sur le FAQ C++.
    Merci pour votre aide !

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Par défaut
    c'est un pointeur sur un char constant.C'est un pointeur sur une fonction qui prend un char * et ne retourne rien (void).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (*)(const char * , void (*)(char *))
    C'est un pointeur sur une fonction qui retourne un int, dont le premier argument est un const char * (chaine de caractères constante) et le second un void(*)(char *) (un fonction).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int (*SETCALLBACK)(const char * , void (*)(char *));
    dit que SETCALLBACK est désormais un type, à savoir un pointeur de fonction retournant un int et prenant une chaine et une fonction comme paramètres.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En gros, on pourrait la séparer en deux typedefs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef void (*UNTYPEPOINTEURDEFONCTION)(char *);
    typedef int (*SETCALLBACK)(const char * , UNTYPEPOINTEURDEFONCTION);
    Le premier typedef déclare le type UNTYPEPOINTEURDEFONCTION comme signifiant "Pointeur vers une fonction ne retournant rien et prenant en paramètre un char*".
    Autorisant à faire ceci:
    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
    28
    void UneFonction(char *s)
    {
       //Afficher la chaine
       puts(s);
    }
     
    void UneAutreFonction(char *s)
    {
       //Couper la chaîne au retour à la ligne
       char *p = strchr(s, '\n');
       if(p != NULL)
          *p = '\0';
    }
     
    void UneFonctionQuiPrendUnPointeurDeFonction(UNTYPEPOINTEURDEFONCTION pf)
    {
       char[] s = "Hello\nWorld!";
     
       pf(s);
       printf("Chaine : \"%s\".\n");
    }
     
    int main(void)
    {
       UneFonctionQuiPrendUnPointeurDeFonction(UneFonction);
       UneFonctionQuiPrendUnPointeurDeFonction(UneAutreFonction);
       return 0;
    }
    Le second typedef déclare un autre type de pointeur de fonction.
    Cette fois-ci, il déclare le type SETCALLBACK comme signifiant "Pointeur vers une fonction retournant un int et prenant en paramètre un const char * et un pointeur UNTYPEPOINTEURDEFONCTION"

    Ce qui donne, en développé :
    "Pointeur vers une fonction retournant un int et prenant en paramètre un const char * et un pointeur vers une fonction ne retournant rien et prenant en paramètre un char*"
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 33
    Par défaut
    Merci pour votre réponse, ça devient plus clair du coup

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2008, 11h29
  2. Réponses: 10
    Dernier message: 16/01/2008, 14h02
  3. cette instruction est elle possible ?
    Par poulette3000 dans le forum Débuter
    Réponses: 4
    Dernier message: 06/10/2007, 23h48
  4. Est-ce que cette ligne est obligatoire ? (<!DOCTYPE html.
    Par cvb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/12/2005, 00h07
  5. Réponses: 1
    Dernier message: 19/09/2005, 15h44

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