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 :

création de #define parametrable


Sujet :

C

  1. #1
    Membre régulier
    Homme Profil pro
    ingénieur essais électronique
    Inscrit en
    Mai 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur essais électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 144
    Points : 75
    Points
    75
    Par défaut création de #define parametrable
    Bonjour,

    Je suis face à un problème nouveau et je cherche une méthode pour réaliser un #define parametrable. Je m'explique :

    #define MA_CONSTANTE (if VARIABLE_X=1 alors MA_CONSTANTE=15 else MA CONSTANTE = 30)

    Voilà un truc du genre. J'espère avoir été clair.

    Peux ton faire ceci et comment, j'ai vu des histoires de macro paramétrable mais je n'arrive pas à l'appliquer à mon cas.

    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    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 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonsoir,

    Soit tu utilises directement les #if #else #endif du précompilateur pour avoir une macro define proprement définie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #if X==1
    #define C 15
    #else
    #define C 30
    #endif
    Soit tu définis directement ta macro avec un paramètre et tu utilises l'opérateur ternaire :

    Ta macro C sera remplacé partout dans le code par cette même expression mais comme elle n'embarque que des constantes, elle sera dans résolue dans tous les cas en sa valeur finale à la compilation.

    On rappelle cependant qu'il s'agit dans les deux cas de précompilation et que ta « variable » X doit être une expression évaluable à la compilation, pas à l'exécution (autrement dit, dans pratiquement tous les cas, elle doit être elle-même une macro define).

    Par contre, tu peux effectivement faire une macro paramétrée du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define C(x) (x==1?15:30)
    Là encore, ta macro sera développée en sa forme complète partout où tu l'as placée, mais « x » sera substitué par l'expression que tu as mise entre parenthèses. Si le compilateur peut la résoudre directement, il le fera, sinon il génèrera le code correspondant comme si tu l'avais directement tapée toi-même. Ça te permet d'utiliser éventuellement des variables définies à l'exécution.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Par contre, tu peux effectivement faire une macro paramétrée du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define C(x) (x==1?15:30)
    Bonjour

    Attention dans ce cas aux problèmes induits par les priorités car le terme "x" est replacé "tel quel" dans l'expression.
    Donc si on demande C(1|2) c'est alors traduit par (1|2 == 1 ?15 :30) ce qui ne produit pas du tout le résultat escompté vu que "==" est prioritaire sur "|"...

    Toujours protéger le paramètre par des parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define C(x) ((x)==1?15:30)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/07/2013, 14h26
  2. Réponses: 1
    Dernier message: 13/06/2007, 09h34
  3. passer des parametres a la création d'un thread
    Par LesLemmings dans le forum Visual C++
    Réponses: 1
    Dernier message: 08/03/2007, 12h35
  4. Création dynamique de bouttons:comment passer un parametre ?
    Par monstroplante dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2005, 22h31
  5. [Struts] paramètre JS dans un bean:define
    Par Mrlud dans le forum Struts 1
    Réponses: 4
    Dernier message: 09/06/2005, 14h38

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