1 votes

Les macros multilignes sont-elles supportées par GCC ?

Les macros multilignes sont-elles supportées (compilables) dans la version 3.2.4 de gcc. J'essaie de compiler mon code source qui contient des macros multilignes sur un ordinateur linux en utilisant la version de gcc mentionnée ci-dessus. J'obtiens une erreur de compilation au niveau de la macro qui est multiligne.

      #define YYCOPY(To, From, Count)       \
      do                    \
     {                  \
       YYSIZE_T yyi;                \
       for (yyi = 0; yyi < (Count); yyi++)  \
         (To)[yyi] = (From)[yyi];       \
     }                  \
      while (0)

Si elles ne sont pas prises en charge, quelle est la solution pour y remédier ? La conversion de la macro en fonction ou une autre option du compilateur peut-elle aider ?

gracias.

-AD

2voto

ergosys Points 15343

Les barres obliques inverses pour continuer la macro sont standard dans le préprocesseur. Vérifiez qu'il n'y a pas d'espaces supplémentaires ou d'autres caractères invisibles après votre barre oblique inverse.

2voto

Adam Rosenfield Points 176408

La spécification ANSI C exige des compilateurs qu'ils supportent cela - plus précisément, la norme stipule que si une ligne se termine par une barre oblique inverse immédiatement avant la nouvelle ligne, le préprocesseur doit traiter cette ligne et la ligne suivante comme une seule ligne logique, comme si la barre oblique inverse et la nouvelle ligne n'existaient pas. Si un préprocesseur ne fait pas cela, ce n'est pas un préprocesseur conforme (ou plus techniquement, un traducteur comme l'appelle la norme).

Le CCG s'efforce d'être aussi conforme que possible à la norme C de l'ANSI. Oui, il supporte les macros multilignes définies avec des antislashs en fin de ligne.

La raison pour laquelle vous obtenez des erreurs de compilation est autre. Vous n'utilisez pas la macro correctement. Sans afficher les messages d'erreur exacts que vous recevez et le code qui invoque la macro, il est impossible de dire ce que vous faites de travers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X