Macro de la bibliothèque C -va_start()

Bibliothèque standard C - <stdarg.h>

Description

va_startLes macros constituent la bibliothèque standard du C.<stdarg.h>Une macro dans un fichier d'en-tête, utilisée pour initialiser uneva_listvariable afin que le nombre d'arguments variadiques soit accessible dans une fonction variadique.

Macro de bibliothèque Cvoid va_start(va_list ap, last_arg)Initialiser la variableap, quiva_argetva_endLes macros sont utilisées ensemble.last_argest le dernier paramètre fixe connu passé à la fonction, c'est-à-dire le paramètre avant les points de suspension.

Cette macro doit être utilisée dansva_argetva_enda été appelée auparavant.

Déclaration

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

void va_start(va_list ap, last);

Paramètre

  • va_list ap: Il s'agit d'un type utilisé pour accéder aux arguments variadiques. Il sera initialisé après l'appel de la macro et utilisé lors desva_argrécupérations suivantes d'arguments dans un appel.
  • last: C'est le dernier paramètre fixe connu avant la liste d'arguments variadiques. Autrement dit, le dernier paramètre de la liste des paramètres de la fonction avant le début des arguments variadiques.

Valeur de retour

N/D

Étapes d'utilisation

  1. Pour définir une fonction variadique, vous devez avoir au moins un paramètre fixe (c'est-à-dire deslastparamètres).
  2. Déclarer unva_listUne variable utilisée pour stocker des informations sur la liste d'arguments variadiques.
  3. Utilisationva_startInitialisation de la macrova_listvariable.
  4. Utilisationva_argLa macro récupère chaque argument variable à tour de rôle.
  5. Utilisationva_endNettoyage de macrova_listvariable.

Exemple

L'exemple suivant montre l'utilisation de la macro va_start().

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, ce qui 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, utilisé pour stocker des informations sur la liste d'arguments variadiques.
  • va_start(args, count);: initialiserargspour accéder depuiscountArguments variables qui commencent ensuite.
  • total += va_arg(args, int);: Utiliserva_argLa macro récupère l'argument variadique suivant, en supposant qu'ils sont tousintde type, et l'accumuler danstotaldans la variable.
  • va_end(args);: nettoyerargs, afin de libérer des ressources et d'éviter un comportement indéfini.

Notes

  • va_startdoit avecva_list、va_argetva_endUtilisés ensemble.
  • Appelva_startAprès, il faut appelerva_endpour terminer le traitement des arguments variables.
  • Lors de l'appelva_startAvant, vous devez vous assurer que la liste des paramètres de la fonction comporte au moins un paramètre fixe.
  • lastLe paramètre est le dernier paramètre fixe avant la liste d'arguments variadiques, utilisé pour déterminer où commencer le traitement des arguments variadiques.

Bibliothèque standard C - <stdarg.h>

autres extensions