Passer des arguments variables à des fonctions avec des listes d'arguments variables
Lorsque vous travaillez avec des fonctions qui acceptent un nombre variable d'arguments, il est souvent nécessaire d'appeler une telle fonction d'une autre. Cependant, passer directement des arguments d'une fonction à une autre peut s'avérer problématique sans modifier la fonction cible si elle est déjà utilisée ailleurs.
Considérez l'exemple suivant :
void example(int a, int b, ...); void exampleB(int b, ...);
Dans ce scénario, exemple appelle l'exempleB. Cependant, la question se pose : comment les arguments variables de l'exemple peuvent-ils être passés à l'exempleB sans modifier son implémentation d'origine ?
Passer directement les arguments de l'exemple à l'exempleB n'est pas possible. Au lieu de cela, une fonction intermédiaire qui prend une va_list doit être créée :
#include <stdarg.h> static void exampleV(int b, va_list args); void exampleA(int a, int b, ...) // Renamed for consistency { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); } void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); } static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
En introduisant exampleV, qui prend à la fois b et args comme arguments, exampleA peut transmettre ses arguments variables à exampleB sans modifier son implémentation. Cette fonction intermédiaire peut ensuite être utilisée pour effectuer les actions prévues sans perturber l'implémentation originale de l'exempleB.
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!