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 :

Preprocesseur, macro,test argument


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut Preprocesseur, macro,test argument
    Bonjour

    j'ai une macro Macro(x) et voudrai faire un test sur argument (x) du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #define Macro(x)
    #if ((x)==0)
    #error petit
    #elif ((x)>1000)
    #error grand
    #else développement ici de la macro qui a aussi des tests sur l'argument. 
    #endif
    Bien sur ci dessus ne fonctionne pas.Tout cela pour ne compiler que le code nécessaire.
    J'ai cela mais compile tout et ne me convient pas car si 0 ou >1000 compile aussi, sans avertissement du préprocesseur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define Macro(x)\
    do{\
    if  ((x)>0)\
    ....
    }\
    while(0)
    Si vous avez la solution, je suis bien sur preneur

    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    automatisme
    Inscrit en
    Octobre 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : automatisme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 59
    Par défaut
    Bonjour,
    Je ne sais pas si tu l'as déjà lu, mais je te conseil ce document.
    Tu pourras voir les limites des macros

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut
    Merci
    Pour ta doc, doc que j'ai lu et tant d'autres.

    La non compilation suite à un test , ce fait sur, les delays en C par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempo.c:216: error: (1355) inline delay argument too large
    j'ai bien la un arrêt de la compil suite à une valeur trop grande,avec inline,

    Je peux me tromper, mais il doit bien y avoir une méthode pour extraire l' argument, bon il y à bien # mais le transforme en chaîne et le #if c'est sur un int.

    je vais continu mes cherches,

    Encore merci pour ta démarche

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par Neratou Voir le message
    Je peux me tromper, mais il doit bien y avoir une méthode pour extraire l' argument, bon il y à bien # mais le transforme en chaîne et le #if c'est sur un int.
    Hola , non c'est pas un int , les instruction préprocesseurs se font avant la compilation...
    D'ailleurs c'est la tout le souci de ton code , tu peux pas écrire du code dans le préprocesseur comme tu le fat, si tu veux faire de l'optimisation avec des Macro alors utilise les inline

    Ou 'utilisr une macro comme ceci si c'est pour du petit code par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define Macro(x) if(x == 1000){ a = 2;}else a = 3;

    Sur plusieurs lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define Macro(x) \
               if(x == 1000) \
              a = 2; \
              else \
              a = 3;

  5. #5
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Par défaut
    Bonjour et merci de me répondre

    j'ai bien utilisé ta proposition, probleme, c'est que tu compiles les 2 conditions avec un saut si condition 1 est vrai par exemple, et pas avertissement si >grand que ou ==0 comme le fait actuellement mon compil
    j'ai aussi fait un test inline.
    Problème, toujours si je trompe les fonctions inline ne font, pas appel à la pile, et donc elles ce comportent, comme des macros.Ici j'ai un joli appel à ma fonction inline avec un beau call, mais je vais gratter coté inline,pas normal

    merci encore

    PS: un bon tuto sur l'utilisation de inline

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Pourquoi faire une macro et non une fonction (potentiellement inline) ?

    Les macros c'est le mal dés que ça devient compliqué.

    Comment vois-tu que la fonction n'est pas inlinée ?

Discussions similaires

  1. [XL-2010] Macro avec argument sur objet feuille excel
    Par Franzz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/03/2012, 18h04
  2. [XL-2003] macro test couleur
    Par bartsho dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/10/2011, 10h09
  3. [XL-2003] Affecter une macro avec argument(s)
    Par miaousse dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/09/2009, 12h00
  4. besoin d'aide pour macro test de cellule et copie selon cas
    Par tibofo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/11/2008, 00h15
  5. [Preprocesseur] macro en string
    Par TabrisLeFol dans le forum C
    Réponses: 2
    Dernier message: 25/01/2007, 18h19

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