Macro de la bibliothèque C -va_end()

Bibliothèque standard C - <stdarg.h>

va_endLa macro se trouve dans la bibliothèque standard C<stdarg.h>une macro dans le fichier d'en-tête, utilisée pour nettoyerva_listvariable, et fait qu'elle ne pointe plus vers aucun emplacement mémoire valide. Elle est utilisée à la fin d'une fonction variadique pour terminer la gestion des arguments variadiques.

Macro de la bibliothèque Cvoid va_end(va_list ap)Permet d'utiliserva_startLa macro effectue le retour d'une fonction avec des arguments variadiques. Si elle n'est pas appelée avant le retour de la fonction...va_end, alors le résultat est indéfini.

Déclaration

Ci-dessous se trouve la déclaration de la macro va_end().

void va_end(va_list ap);

Paramètre

  • va_list ap: C'est unva_listvariables du type qui ont déjà été transmisesva_startouva_copyLa macro initialise, et est utilisée pour accéder à la liste d'arguments variables.

Valeur de retour

Cette macro ne renvoie aucune valeur.

Étapes d'utilisation

  • Dans une fonction variadique, utilisez lava_startInitialisation de la macrova_listvariable.
  • Utilisationva_argmacro pour récupérer chaque argument variadique en séquence.
  • Après avoir traité tous les arguments variadiques, utilisez lava_endNettoyage de macrova_listvariable.

Exemple

Ce qui suit est un exemple d'utilisation deva_endUn exemple de programme de la macro, qui définit une fonction variadique pour calculer la somme d'un nombre variable d'arguments :

Exemple

#include <stdio.h>
#include <stdarg.h>

// Fonction variadique, calcule la somme des arguments
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // Initialiser args pour accéder aux arguments variadiques
    va_start(args, count);

    // Obtenir chaque argument variadique un par un et l'ajouter à total
    for (int i = 0; i < count; i++) {
        total += va_arg(args, int);
    }

    // Nettoyer args
    va_end(args);

    return total;
}

int main() {
    printf("Sum of 1, 2, 3: %d\n", sum(3, 1, 2, 3));  // Sortie 6
    printf("Sum of 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7));  // Sortie 22
    return 0;
}

Compilons et exécutons le programme ci-dessus. Cela produira le résultat suivant :

Sum of 1, 2, 3: 6
Sum of 4, 5, 6, 7: 22

Analyse syntaxique

  • va_list args;: déclarer uneva_listvariable de typeargs, qui est utilisé pour stocker des informations sur la liste d'arguments variables.
  • va_start(args, count);: initialiserargspour accéder depuiscountles arguments variadiques qui commencent après cela.
  • total += va_arg(args, int);: Utiliserva_argLa macro obtient l'argument variadique suivant, en supposant ici qu'ils sont tous...inttype, et l'accumuler dans latotaldans la variable.
  • va_end(args);: nettoyerargs, afin de libérer les ressources et d'éviter un comportement indéfini.

Notes

  • Chaque fois que vous utilisezva_startInitialiserva_listaprès la variable, vous devez utiliserva_endNettoyez-la.
  • va_endLa macro est utilisée pour nettoyerva_listvariable, afin de libérer toutes les ressources et d'éviter d'éventuels problèmes de mémoire avant de quitter la fonction.
  • Appelva_endAprès,va_listLa variable ne sera plus valide et ne doit plus être utilisée.

Bibliothèque standard C - <stdarg.h>

autres extensions