C Language Utilizzo di un argomento di conteggio esplicito per determinare la lunghezza della va_list


Esempio

Con qualsiasi funzione variadica, la funzione deve sapere come interpretare la lista degli argomenti variabili. Con le funzioni printf() o scanf() , la stringa di formato indica alla funzione cosa aspettarsi.

La tecnica più semplice consiste nel passare un conteggio esplicito degli altri argomenti (che sono normalmente tutti dello stesso tipo). Ciò è dimostrato nella funzione variadica nel codice sottostante che calcola la somma di una serie di numeri interi, dove può esserci un numero qualsiasi di numeri interi ma quel conteggio è specificato come argomento prima dell'elenco di argomenti variabili.

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

/* first arg is the number of following int args to sum. */
int sum(int n, ...) {
    int sum = 0;
    va_list it; /* hold information about the variadic argument list. */

    va_start(it, n); /* start variadic argument processing */
    while (n--)
      sum += va_arg(it, int); /* get and sum the next variadic argument */
    va_end(it); /* end variadic argument processing */

    return sum;
}

int main(void)
{
    printf("%d\n", sum(5, 1, 2, 3, 4, 5)); /* prints 15 */
    printf("%d\n", sum(10, 5, 9, 2, 5, 111, 6666, 42, 1, 43, -6218)); /* prints 666 */
    return 0;
}