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 :

récupérer le token d'un #define par sa value


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut récupérer le token d'un #define par sa value
    Bonjour, voilà je me présente (c'est mon premier post) je suis étudiant et actuellement en stage dans une boite d'informatique à l'étranger et dans un programme que je debug je voudrais récupérer le token d'un #define par sa value. Je m'explique. J'ai deux fichiers un cpp et un .h
    Dans mon .h j'ai pleins de #define token [value], dans mon .cpp il reconnait bien si je lui demande token il me dit [value] jusqu'à la tout va bien
    mais moi ce que je veut c'est lui demander [value] et qu'il me donne token
    et ça je sait pas comment faire...
    Au debut je voulais contourner le problème juste en faisant une lecture du .h et récupérer les info mais le problème et que le programme tournera sur une machine qui ne dispose pas des .h
    Alors j'avais pensé tout simplement à mapper manuellement les info..
    Mais le problème est que si il y a une mise à jour du .h et donc des #define et bien je suis chocolat.. Je vous demande pas une solution toute faite je me doute que vous avez d'autre chose à faire mais j'ai beau chercher sur le forum et sur le net je ne trouve pas de solution à mon problème. Je pense qu'il doit y avoir une fonction du style get.. mais je ne trouve pas. Quelqu'un en sait plus sur ce genre d’opération ?
    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    ce que tu demandes est impossible par défaut.
    Renseignes-toi avant toute chose sur ce qu'est un define (une macro).
    Ca n'a qu'une seule utilité : remplacer la chaîne par sa valeur avant la compilation.
    Et la passe n'est réalisée qu'une seule fois.

    Une façon de faire c'est des macros, mais avec des enums ou variables constantes et non des defines.
    Quelque chose comme ça devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // fichier de définition def.h
    VALUE(blabla, 4);
    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
    #define VALUE(name, value) const long long name = value;
    #include "def.inc"
    #undef VALUE
     
    const char* GetNameByValue(int value)
    {
    #define VALUE(name, value) case value: return #name;
    switch (value) {
    #include "def.h"
      default: return "NOT FOUND";
     }
    #undef VALUE
    }
     
    long long GetByName(const char* szName)
    {
    #define VALUE(name, value) if (strcmp(#name, szName) == 0) return value;
    #include "def.h"
    return -1;
    #undef VALUE
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Bonjour Bousk,

    et merci de ta réponse je comprend le fait que se soit impossible par defaut c'est une commande préprocesseur...

    Cependant mon problème et que je ne peut pas changer le .h car dans le temps se .h sera upgradé.
    J'avou que j'ai pas d'idée mes connaissances en C++ sont encore assez faible.

  4. #4
    Invité
    Invité(e)
    Par défaut
    si tu peux pas toucher au .h, tu peux quand meme les parser.

    donc si c'est pour y acceder depuis le cpp, t'as qu'a ouvrir le .h et parser les #define

    Sinon tu peux aussi dire pourquoi t'as besoin de recuperer le nom a partir de la valeur, parce que c'est ca sent pas mal.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Le fait que le .h soit upgradé est une fausse excuse.
    Une fois la syntaxe mise en place, il suffit de l'utiliser.

    Sinon ils changent d'idée, parce qu'en plus d'être totalement anormale, ils ne veulent pas la rendre réalisable.

    Dans l'absolu vouloir retrouver un nom à partir d'une valeur, à fortiori de macros, est, amha, indicateur de problème, voire de méconnaissance de mécanismes et/ou mauvaise utilisation des macros.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2012
    Messages : 8
    Par défaut
    Merci de vos réponses,

    c'est vrai que j'ai pas expliqué le programme, en fait c'est un MQWrapper. En gros la partie dont je m'occupe retourne un code en fonction des errreurs qu'il y a dans la command argument, l'ensemble de code qu'il peut retourner est défini dans un .h fourni par IBM (donc évolutif dans le temps)
    Le programme fonctionne correctement et pour chaque erreur il me retourne le bon code associé. Mais pour plus de clarté je voudrai afficher le nom de l'erreur. Ce nom est disponnible dans le .h d'IBM par les
    #define NOM_ERREUR 4
    Donc si j'ai compris c'est qu'initialement le code retourne NOM_ERREUR et que par l'emploi des #define du .h le code retourne 4.

    Je sais que c'est un peu confus mais c'est bien la tout le problème.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/09/2006, 10h05
  2. [c#] comment récupérer le namespace d'une DLL par réflection?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/07/2006, 13h20
  3. Récupérer le path d'un fichier par formuaire ?
    Par Yekhen dans le forum Langage
    Réponses: 6
    Dernier message: 30/05/2006, 20h22

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