Maison >développement back-end >C++ >Comment obtenir une fonctionnalité récursive avec les macros C/C ?
Macros récursives en C/C
Les macros C/C ne prennent pas directement en charge la récursivité. Cependant, il existe des moyens d'obtenir une fonctionnalité récursive à l'aide d'astuces de préprocesseur.
Approche utilisant des expressions différées :
Cette approche utilise des expressions différées pour empêcher la macro d'être peinte en bleu, permettant ainsi de l'étendre de manière récursive.
#define EMPTY(...) #define DEFER(...) __VA_ARGS__ EMPTY() #define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)() #define EXPAND(...) __VA_ARGS__ #define pr_id() pr #define pr(n) ((n==1)? 1 : DEFER(pr_id)()(n-1))
Bien que cette approche permette la récursion, elle nécessite plusieurs extensions pour compléter la récursion.
Exemple : Macro de répétition récursive :
Voici un exemple de macro de répétition récursive :
#define REPEAT(count, macro, ...) \ WHEN(count) \ ( \ OBSTRUCT(REPEAT_INDIRECT) () \ ( \ DEC(count), macro, __VA_ARGS__ \ ) \ OBSTRUCT(macro) \ ( \ DEC(count), __VA_ARGS__ \ ) \ ) #define REPEAT_INDIRECT() REPEAT
Exemple de Utilisation :
// An example of using the recursive repeat macro #define M(i, _) i EVAL(REPEAT(8, M, ~)) // 0 1 2 3 4 5 6 7
Conclusion :
Bien que les macros C/C ne prennent pas directement en charge la récursivité, il est possible d'y parvenir grâce à des astuces de préprocesseur comme le différé expressions et macros personnalisées. Ces méthodes peuvent être utiles dans des cas spécialisés où une fonctionnalité récursive est requise dans les définitions de macros.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!