Pouvez-vous faire quelque chose comme ça avec une macro dans C ?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
J'ai l'impression que non, car le préprocesseur ne fait qu'un seul passage.
CCG officiel seulement. Aucun outil tiers s'il vous plaît.
Les macros ne peuvent pas se développer en directives de prétraitement. De C99 6.10.3.4/3 "Nouvelle numérisation et remplacement ultérieur":
La séquence de jetons de prétraitement complètement remplacée par macro résultante n'est pas traitée comme une directive de prétraitement même si elle en ressemble à une,
Vous ne pouvez pas définir de macros dans d'autres macros, mais vous pouvez appeler une macro à partir de votre macro, ce qui peut vous donner essentiellement les mêmes résultats.
#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
donc, A(y)
est développée en do {printf("%d", (y)) }while(0)
Non. L'ordre des opérations est tel que toutes les directives du préprocesseur sont reconnues avant toute expansion de macro; ainsi, si une macro se développe en quelque chose qui ressemble à une directive de préprocesseur, elle ne sera pas reconnue comme telle, mais sera plutôt interprétée comme du texte source C (erroné).
Désolé vous ne pouvez pas. Vous pouvez appeler d'autres macros dans les macros mais pas en définir de nouvelles.
Vous pouvez essayer de l'exécuter uniquement avec l'option de prétraitement, puis de compiler avec le fichier prétraité.
Vous pouvez le faire cependant: #define SUPERMACRO (X, Y) définir X Y
Ensuite, vous pouvez utiliser la fonctionnalité de macro-expansion de vos éditeurs et coller le # manquant.
Ou encore mieux: utilisez un langage de traitement de chaîne différent et plus puissant comme préprocesseur.