Passer des arguments variables à des fonctions avec des listes d'arguments variables
Considérez deux fonctions avec des arguments variables similaires :
void example(int a, int b, ...); void exampleB(int b, ...);
Supposons que example appelle exampleB, mais sans modifier exampleB (qui est utilisé ailleurs). Comment pouvons-nous passer les arguments variables de l'exemple à l'exemple B ?
Solution :
La transmission directe d'arguments n'est pas possible. Au lieu de cela, nous créons une fonction wrapper qui prend une va_list :
#include <stdarg.h> static void exampleV(int b, va_list args);
Exemple de fonction modifiée A :
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); }
Exemple de fonction non modifiéeB :
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
Fonction Wrapper exempleV :
static void exampleV(int b, va_list args) { // Whatever `exampleB` was intended to do... // Except it doesn't call either `va_start` or `va_end`. }
Cette approche nous permet de passer les arguments variables d'exemple à exempleB sans modifier ce dernier. La fonction wrapper exampleV n'appelle pas va_start ou va_end, ce qui garantit la cohérence avec l'utilisation existante de exampleB.
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!