Détermination du nombre d'arguments dans les macros variadiques à l'aide du préprocesseur C VA_ARGS
Les macros variadiques en C permettent l'utilisation de un nombre arbitraire d'arguments. Cependant, déterminer le nombre d’arguments transmis à une macro variadique peut s’avérer difficile. Cet article explore une solution simple et efficace utilisant la macro de préprocesseur VA_ARGS.
Comprendre VA_ARGS
VA_ARGS est une macro de préprocesseur intégrée qui s'étend aux arguments réels transmis à un macro variadique. Cependant, il ne fournit aucune information sur le nombre d'arguments.
Comptage des arguments à l'aide de la taille d'un tableau entier
Pour déterminer le nombre d'arguments dans une macro variadique, nous peut exploiter le comportement des tailles de tableau dans le préprocesseur C. La macro suivante, NUMARGS(), utilise cette technique :
#define NUMARGS(...) (sizeof((int[]){__VA_ARGS__})/sizeof(int))
Cette macro s'étend jusqu'à la taille d'un tableau contenant tous les arguments qui lui sont transmis, divisés par la taille d'un entier. La valeur résultante est le nombre d'arguments.
Exemple d'utilisation
Considérez la macro suivante, SUM(), qui calcule la somme de ses arguments :
#define SUM(...) (sum(NUMARGS(__VA_ARGS__), __VA_ARGS__))
Pour utiliser SUM(), nous l'appellerions avec un nombre variable d'arguments, comme donc :
SUM(1); SUM(1, 2); SUM(1, 2, 3);
La macro NUMARGS() compterait le nombre d'arguments et le transmettrait avec les arguments à la fonction sum().
Gestion de la liste d'arguments vide
Par défaut, la macro NUMARGS() échouera si elle est appelée avec une liste d'arguments vide. Pour résoudre ce problème, une variante de la macro peut être définie à l'aide des extensions GNU C :
#define NUMARGS(...) (sizeof((int[]){0, ##__VA_ARGS__})/sizeof(int)-1)
Cette variante permet une liste d'arguments vide et compte correctement le nombre d'arguments dans tous les cas.
Conclusion
La macro du préprocesseur VA_ARGS peut être exploitée pour compter efficacement les nombre d'arguments dans les macros variadiques. En combinant cette technique avec la manipulation de la taille d'un tableau d'entiers, nous pouvons développer des macros utiles pour gérer un nombre variable d'arguments en C .
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!