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 :

question sur l'utilité d'une macro


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 31
    Points
    31
    Par défaut question sur l'utilité d'une macro
    Hello tout le monde,

    est-ce que quelqu'un pourrait m'expliquer l'intérêt de faire une macro comme celle qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MY_MACRO (reinterpret_cast<AnyObject>(INT_MIN + 1))
    Et c'est utilisé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnyObject anObject = MY_MACRO
    Je suis désolé mais je ne suis pas autorisé à vous donner le contexte...

  2. #2
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    L’intérêt de ce genre de macro est de simplifier l'écriture et la lecture de ton code.
    De plus tu peux, en simplement redéfinissant ta macro, changer l'effet de toutes ses occurrences sans passer 10 plombes à fouiller ton code.
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Certes...

    D'abord merci pour ta réponse. Mais je vais peut-être reformuler alors. Qu'est ce que ça fait concrètement?

    Un reinterpret_cast n'est-il pas fait pour un cast d'objet vers un autre?
    En gros cette macro caste une entier en un objet de type AnyObject...
    Qu'est ce que ça représente en C++...?

    C'est comme si je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaVoiture renault = 1234;
    non?

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Non ca reutilise le pattern de bit pour reconstruire l'objet.

    Note que cette utilisation de reinterpret_cast est non standard et conduit tres certainement a une Undefined Behavior.

    cas ent le gars qui c'est pas ecrire un constructeur :/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Merci pour ta réponse, mais je crains de te demander de m'aider un peu plus ^^

    Je ne vois pas du tout comment un objet peut être reconstruit à partir d'un simple int...
    Et qu'implique un "Undefined Behavior"?

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Hello

    en fait l'idée est de partir du principe que l'empreinte mémoire de l'entier choisi est identique à l'empreinte mémoire de l'objet construit que l'on veut obtenir.

    C'est complètement n'imp de faire ça, peux tu contacter l'auteur pour lui demander des explications ?
    Find me on github

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    En fait, ce sujet soulève deux questionnements :

    1. quel est le but de ce reinterpret_cast() ?
    2. pourquoi utiliser une macro plutôt qu'une fonction inline ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    En fait, je me suis trompé, je peux vous donner le fichier où est définie cette macro. Je croyais que c'était dans le code du client , mais non, c'est dans l'implémentation de référence de iMesh...

    Du coup, tu trouveras en pièce jointe le fichier où la macro est définie (l. 71), et il me semble qu'il y a un exemple d'utilisation plus bas.
    Et la classe iBase_EntitySetHandle ne contient que un constructeur et un destructeur vides!
    Fichiers attachés Fichiers attachés

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    C'est une horreur, ce code : du #define en veux-tu en voilà. Bonjour le débogage... Ça doit être codé avec gcc, et ils ont dû apprendre à se passer de gdb...

    Je n'ai pas vraiment assez d'expérience du bas niveau pour te donner des explications, qui j'espère sera fournie par d'autres membres.

    En revanche, je me demande pourquoi il prend la peine de faire un reinterpret_cast<iBase_EntitySetHandle> pour ensuite faire une comparaison avec un void*...

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    J'avoue, j'ai même pas le courage de le lire... on est dans le grand n'importe quoi.
    Find me on github

Discussions similaires

  1. Question sur l'existence d'une macro
    Par challe1976 dans le forum Macros Access
    Réponses: 16
    Dernier message: 09/04/2015, 16h41
  2. Question sur la rapidité d'une macro
    Par johannj dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/06/2009, 16h29
  3. Question sur la création d'une table
    Par air dans le forum Oracle
    Réponses: 4
    Dernier message: 23/10/2005, 12h46
  4. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  5. question sur la creation d'une base
    Par vbcasimir dans le forum Débuter
    Réponses: 4
    Dernier message: 27/05/2005, 11h17

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