Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opération en préprocesseur

Sujet résolu
    28 avril 2006 à 16:55:47

    Bonjour !

    J'ai un tout petit problème :) :
    Je code un petit programme et dans un fichier .h je fais mes #define :


    #define A 2
    #define B 5
    #define NOM_MONDE "monde"

    (simplifié bien sur)

    Je voudrais savoir comment faire pour que NOM_MONDE soit en fait égale à "monde"+A+B

    Ca doit pas être très claire alors je donne un exemple : ici NOM_MONDE devrait valoir "monde25"

    Est-ce que c'est trop demandé pour notre petit langage préprocesseur ?

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2006 à 16:57:41

      Essaye :

      #define NOM_MONDE mondeAB


      IL devrait remplacer A et B par leur valeurs respectives. Enfin je ne suis pas sur. :-°
      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2006 à 18:11:31

        #define MONDE "monde" ## A ## B

        (si mes souvenirs sont bons :p)
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2006 à 18:35:50

          Bah j'arrive à faire marcher aucun des deux :S
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2006 à 18:56:09

            Citation : socomajor



            #define A 2
            #define B 5
            #define NOM_MONDE "monde"


            Ca doit pas être très claire alors je donne un exemple : ici NOM_MONDE devrait valoir "monde25"



            #include <stdio.h>

            #define STR_(x) #x
            #define STR(x) STR_(x)

            #define A 2
            #define B 5
            #define NOM_MONDE "monde" STR(A) STR(B)

            int main(void)
            {
               puts(NOM_MONDE);
               return 0;
            }
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
            Anonyme
              28 avril 2006 à 18:56:15

              Dasn ce cas, il faut que 2 et 5 soient des chaînes (sinon ça complique pas mal :p ), ceci devrait fonctionner :

              #define A "2"
              #define B "5"
              #define NOM_MONDE "monde" A B

              On aura donc trois chaînes adjacentes, qui seront automatiquement concacténées.
              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2006 à 18:57:55

                Citation : louisclem

                Dasn ce cas, il faut que 2 et 5 soient des chaînes (sinon ça complique pas mal :p ), ceci devrait fonctionner :


                #define A "2"
                #define B "5"
                #define NOM_MONDE "monde" A B


                On aura donc trois chaînes adjacentes, qui seront automatiquement concacténées.


                Exact, c'est la première étape. La seconde, c'est celle que le propose : "comment remplacer une macro numérique par une chaine du même nombre..."
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  28 avril 2006 à 19:01:43

                  J'ai une petite question : j'ai déja observé cette manip avec str et xstr au lieu de STR et STR_, mais à quoi ça sert de définir systématiquement deux macros, donc l'une n'est finalement qu'un alias de l'autre en quelque sorte ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2006 à 19:10:38

                    Citation : bluestorm

                    J'ai une petite question : j'ai déja observé cette manip avec str et xstr au lieu de STR et STR_, mais à quoi ça sert de définir systématiquement deux macros, donc l'une n'est finalement qu'un alias de l'autre en quelque sorte ?


                    Non. Fait les remplacement à la main, tu verras que pour atteindre la valeur numérique il faut 2 niveaux...

                    Le préprocesseur ne fait que des remplacements de caractères. Rien d'autre.

                    Au fait 'str' est un préfixe reservé par le langage...
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      28 avril 2006 à 19:54:29

                      Citation : -ed-

                      Citation : bluestorm

                      J'ai une petite question : j'ai déja observé cette manip avec str et xstr au lieu de STR et STR_, mais à quoi ça sert de définir systématiquement deux macros, donc l'une n'est finalement qu'un alias de l'autre en quelque sorte ?


                      Non. Fait les remplacement à la main, tu verras que pour atteindre la valeur numérique il faut 2 niveaux...


                      Pour donner le détail : Il faut deux niveaux car les macros dans la chaîne de remplacement ne sont remplacées/évaluées qu'après substitution des arguments de la macro par leurs valeurs (les tokens correspondants) et évaluation des opérateurs éventuels.

                      Citation

                      Au fait 'str' est un préfixe reservé par le langage...


                      Oui, ceci dit 'str' tout court sans rien derrière est un nom valide.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Opération en préprocesseur

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown