aboutsummaryrefslogtreecommitdiff
path: root/tests/i/extern-c-variadic/lib.c
blob: 8f723a5db70826923bbf919202adecba22cddd4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

#include <stdarg.h>

/* Each argument after n arrives promoted, so va_arg reads int or double. */
int sum_ints(int n, ...) {
    va_list ap;
    int total = 0;
    va_start(ap, n);
    for (int i = 0; i < n; ++i) total += va_arg(ap, int);
    va_end(ap);
    return total;
}

double sum_doubles(int n, ...) {
    va_list ap;
    double total = 0;
    va_start(ap, n);
    for (int i = 0; i < n; ++i) total += va_arg(ap, double);
    va_end(ap);
    return total;
}