Forum Programmation.c directive pragma dans une macro

Posté par  .
Étiquettes : aucune
0
10
juin
2008
Petite question pour les furieux du preprocessing : Comment inclure une directive pragma dans une macro?

Par ex: #define OPT_SIZE #pragma Osize

Bien sûr, lorsque je fais un OPT_SIZE, je me fais jeter... À noter que j'utilise le compilo pour Arm ADS, mais si qq un a une solution pour un autre compilo, je suis preneur.
  • # Faire en 2 phases

    Posté par  . Évalué à 1.

    J'ai réussi à faire ce que tu veux mais en compilant en 2 phase, c'est à dire que j'appelle moi-même le préprocesseur et je l'envoie sur l'entrée du compilateur ainsi :

    Fichier source :
    #define OPT_SIZE #pragma Osize

    OPT_SIZE

    int main()
    {
    return 0;
    }


    $ gcc -E prep.c | gcc -o prep -x c -
  • # A essayer...

    Posté par  . Évalué à 2.

    Voir:
    http://www.delorie.com/gnu/docs/gcc/cpp_45.html

    Apparement C99 introduit _Pragma("une chaine") pour pouvoir mettre des pragma dans les macros justement...
    • [^] # Re: A essayer...

      Posté par  . Évalué à 1.

      J'ai essayé, ça marche! ...mais pas besoin de se planquer derrière le standard pour ne pas passer pour un furieux du preprocessing!!! :-)

      Merci!!
    • [^] # Re: A essayer...

      Posté par  . Évalué à 0.

      Merci de l'info, c'est pas que j'en ai besoin maintenant mais c'est toujours bon à savoir.

      Ceci dit je me demande pourquoi le fait d'avoir un #pragma dans une macro ne marche pas étant donné que c'est supposé être utilisé par le compilateur et non par le preprocesseur.

      Étienne
      • [^] # Re: A essayer...

        Posté par  . Évalué à 2.

        Parce que pour l'exploiter, ton compilo a besoin que ton #pragma soit pré-processé avant.
        • [^] # Re: A essayer...

          Posté par  . Évalué à 1.

          Pourquoi alors est-ce qu'un gcc -E (ou un cpp) me laisse le #pragma ?
          • [^] # Re: A essayer...

            Posté par  . Évalué à 2.

            s/supposé/censé/

            Je n'en sais rien, mais comme #pragma est censé spécifier des arguments à des extensions du langage, peut-être a-t-il besoin de pouvoir être exploité par toutes les couches, voire même par d'autres compilateurs, en particulier si on ne se sert de GCC que pour la précompilation ...
            • [^] # Re: A essayer...

              Posté par  . Évalué à 2.

              Il me semblait que le #pragma n'était destiné qu'au compilateur et non au pré-processeur. Si tel n'est pas le cas alors je comprend que la phase de pré-processing interne à gcc ne soit pas identique à un appel à gcc -E en ce qui concerne les #pragma.

              Étienne
              • [^] # Re: A essayer...

                Posté par  . Évalué à 1.

                Tu as des pragmas destines au pre-processeur (Cf la doc de GCC)
  • # .

    Posté par  (site web personnel) . Évalué à 2.

    #define OPT_SIZE TRUE

    #if (OPT_SIZE)
    #pragma 0size
    #endif

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.