Maison > développement back-end > C++ > Comment puis-je déterminer le nombre d'arguments dans une macro variadique C ?

Comment puis-je déterminer le nombre d'arguments dans une macro variadique C ?

Linda Hamilton
Libérer: 2024-12-25 14:48:14
original
229 Les gens l'ont consulté

How Can I Determine the Number of Arguments in a C   Variadic Macro?

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))
Copier après la connexion

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__))
Copier après la connexion

Pour utiliser SUM(), nous l'appellerions avec un nombre variable d'arguments, comme donc :

SUM(1);
SUM(1, 2);
SUM(1, 2, 3);
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal