40 votes

Pourquoi la syntaxe de __attribute__((...)) de GCC utilise-t-elle des parenthèses doubles ?

La documentation de la syntaxe __attribute__((...)) de GCC indique que les attributs doivent être entourés de doubles parenthèses, mais ne donne pas de justification pour cette décision de conception.

Quelle raison pratique aurait poussé les concepteurs de GCC à exiger cela ? Est-ce que cela a quelque chose à voir avec la manipulation par le préprocesseur de parenthèses doubles ?

39voto

Jan Hudec Points 27417

Pour faciliter son élimination pour différents compilateurs. Si vous avez du code portable, vous devez le supprimer pour d'autres compilateurs, donc vous faites

#ifndef __GNUC__
#define __attribute__(x)
#endif

Le problème est que les attributs ont un nombre variable d'arguments et vous pouvez combiner plusieurs attributs dans une déclaration __attribute__, mais C n'a introduit des macros variadiques que dans C99. Avec la double parenthèse, la définition ci-dessus n'a pas besoin de macros variadiques.

17voto

Jens Gustedt Points 40410

probablement l'idée est que vous pouvez déclarer une simple macro qui aide à ignorer tout cela dans n'importe quel autre compilateur C et C++. Si vous n'aviez pas la deuxième paire de parenthèses, cette macro serait nécessairement une avec .... Donc, pour les compilateurs qui ne supportent pas que vous seriez baisé.

Modifier : Avec cette syntaxe, il peut simplement ressembler à

#ifdef __GNUC__
# define attribute(X) __attribute__(X)
#else
# define attribute(X)
#endif

puis vous utiliseriez attribute pour vos déclarations de fonction, par exemple

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