Méta Programmation Macro

Je sais que c‘est probablement mauvais ou impossible, mais comme il ne s’agit pas d’une macro récursive, je pense que cela devrait être possible.

#define FOO 15 #define MAKE_BAR(x) BAR_##x #define MY_FOO_BAR MAKE_BAR(FOO) 

J’aimerais que MY_FOO_BAR soit évalué à BAR_15. Existe-t-il un moyen de demander au préprocesseur d’évaluer FOO avant de le transmettre à MAKE_BAR?

Vous avez besoin d’un autre niveau d’appels de macro:

 #define FOO 15 #define MAKE_BAR_INNER(x) BAR_##x #define MAKE_BAR(x) MAKE_BAR_INNER(x) #define MY_FOO_BAR MAKE_BAR(FOO) 

Cela est dû à la manière dont les parameters sont gérés lors du développement de macros fonctionnelles. L’opérateur de concaténation ## empêche le développement des parameters. Vous devez donc “forcer” le développement en ajoutant un autre “calque”.